将文本/字符串转换成数字,看pandas是如何清理数据的 您所在的位置:网站首页 如何将excel中数字文本转换为数值 将文本/字符串转换成数字,看pandas是如何清理数据的

将文本/字符串转换成数字,看pandas是如何清理数据的

2024-06-16 08:15| 来源: 网络整理| 查看: 265

标签:pandas

本文研讨将字符串转换为数字的两个pandas内置方法,以及当这两种方法单独不起作用时,如何处理一些特殊情况。

运行以下代码以创建示例数据框架。每列都包含文本/字符串,我们将使用不同的技术将它们转换为数字。我们使用列表解析创建多个字符串列表,然后将它们放入数据框架中。

代码语言:javascript复制import pandas as pd import numpy as np l1 = [f'10{i}'for i in range(10,30)] l2 = [f'10{i}.{i}'for i in range(10,30)] l3 = [f'1.0{i}.{i}'for i in range(10,30)] l4 = [f'1,0{i}'for i in range(10, 30)] l5 = [f'$1,0{i}'for i in range(10,30)] l6 = [f'{i}%'for i in range(20)] l7 = [f'{i}.{i}%'for i in range(20)] l8 = [f'10{i}'if i%2 == 0else'asdf'for i in range(10,30)] l9 = [f'$1,0{i}'if i%2 == 0else'asdf'for i in range(10,30)] df = pd.DataFrame({'l1':l1, 'l2':l2, 'l3':l3, 'l4':l4, 'l5':l5, 'l6':l6, 'l7':l7, 'l8':l8, 'l9':l9, })

使用df.head()方法查看数据框架的前5行。记住,数据框架中的所有值都是字符串数据类型。

图1

df.astype()方法

这可能是最简单的方法。我们可以获取一列字符串,然后强制数据类型为数字(即整数或浮点数)。

对于第一列,因为我们知道它应该是“整数”,所以我们可以在astype()转换方法中输入int。

图2

然而,如果数据包含小数,int将不起作用。在这种情况下,我们需要将float传递到方法参数中。

图3

这个方法看起来很容易应用,但这几乎是它所能做的——它不适用于其余的列。原因是其他列都包含某种特殊字符,如逗号(,)、美元符号($)、百分比(%)等。显然,.astype()方法无法处理这些特殊字符。

pd.to_numeric()方法

此方法的工作方式与df.astype()类似,但df.astype()无法识别特殊字符,例如货币符号($)或千位分隔符(点或逗号)。

然而,这种方法在某些需要清理数据的情况下非常方便。例如,列l8中的数据是“文本”数字(如“1010”)和其他实文本(如“asdf”)的混合。在pd.to_numeric方法中,当errors=’coerce’时,代码将运行而不引发错误,但对于无效数字将返回NaN。

然后我们可以用其他伪值(如0)替换这些NaN。

图4

图5

包含特殊字符的数据

对于包含特殊字符(如美元符号、百分号、点或逗号)的列,我们需要在将文本转换为数字之前先删除这些字符。

我们可以使用df.str访问整个字符串列,然后使用.str.replace()方法替换特殊字符。例如:

df[‘l3’] = df[‘l3’].str.replace(‘.’,‘’, n=1)

上面的n=1参数意味着我们只替换“.”的第一个匹配项(从字符串开始)。默认情况下,n设置为-1,这将替换所有引用。

不要将.str.replace()与df.replace()混淆。前者只对字符串进行操作,而后者可以处理字符串或数字。

最后,清理其他列:

代码语言:javascript复制df['l4']= df['l4'].str.replace(',', '') df['l5']= df['l5'].str.replace(',', '').str.replace('$', '') df['l6']= df['l6'].str.replace('%', '') df['l9']= df['l9'].str.replace('$', '').str.replace(',', '')

删除所有特殊字符后,现在可以使用df.astype()或pd.to_numeric()将文本转换为数字。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有