前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将文本/字符串转换成数字,看pandas是如何清理数据的

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

作者头像
fanjy
发布2022-04-13 13:40:29
7K0
发布2022-04-13 13:40:29
举报
文章被收录于专栏:完美Excel

标签: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()将文本转换为数字。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档