分享

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

 hercules028 2022-03-16

excelperfect

标签:pandas

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

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

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行。记住,数据框架中的所有值都是字符串数据类型。

Image

1

df.astype()方法

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

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

Image

2

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

Image

3

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

pd.to_numeric()方法

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

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

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

Image

4

Image

5

包含特殊字符的数据

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

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

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

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

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

最后,清理其他列:

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

注:本文学习整理自pythoninoffice.com

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多