搜索
您的当前位置:首页正文

让你一文弄懂Pandas文本数据处理

来源:六九路网
让你⼀⽂弄懂Pandas⽂本数据处理

⽬录

前⾔

1. ⽂本数据类型1.1. 类型简介1.2. 类型差异2. 字符串⽅法2.1. ⽂本格式2.2. ⽂本对齐2.3. 计数与编码2.4. 格式判断3. ⽂本⾼级操作3.1. ⽂本拆分3.2. ⽂本替换3.3. ⽂本拼接3.4. ⽂本匹配3.5. ⽂本提取总结前⾔

⽇常⼯作中我们经常接触到⼀些⽂本类信息,需要从⽂本中解析出数据信息,然后再进⾏数据分析操作。

⽽对⽂本类信息进⾏解析是⼀件⽐较头秃的事情,好巧,Pandas刚好对这类⽂本数据有⽐较好的处理⽅法,那就让我们来⼀起学⼀学吧!

1. ⽂本数据类型

在pandas中存储⽂本数据有两种⽅式:object 和 string。在pandas 1.0版本之前,object是唯⼀的⽂本类型,在⼀列数据中如果包含数值和⽂本等混合类型则⼀般也会默认为object。在pandas 1.0 版本之后,新增了string⽂本类型,可以更好的⽀持字符串的处理。

1.1. 类型简介

默认情况下,object仍然是⽂本数据默认的类型。

如果要采⽤string类型,我们可以通过dtype进⾏指定

在Series 或 Dataframe被创建后,我们还可以通过astype进⾏类型强制转换

当然,我们还有个df.convert_dtypes()⽅法可以进⾏智能数据类型选择

1.2. 类型差异

string和object在操作上有所不同。

对于sting来说,返回数字输出的字符串访问器⽅法将始终返回可为空的整数类型;对于object来说,是 int 或 float,具体取决于 NA 值的存在

对于string类型来说,返回布尔输出的⽅法将返回⼀个可为空的布尔数据类型

2. 字符串⽅法

Series 和 Index 都有⼀些字符串处理⽅法,可以⽅便进⾏操作,最重要的是,这些⽅法会⾃动排除缺失/NA 值,我们可以通过str属性访问这些⽅法。

2.1. ⽂本格式

⽂本格式是对字符串⽂本进⾏格式操作,⽐如转换⼤⼩写之类的

>>> s = pd.Series(

... [\"A\... dtype=\"string\"... )

>>> s.str.lower() # 转⼩写0 a1 b2 aaba3 baca4 5 cat

dtype: string

>>> s.str.upper() # 转⼤写0 A1 B2 AABA3 BACA4 5 CATdtype: string

>>> s.str.title() # 每个单词⼤写0 A1 B2 Aaba3 Baca4 5 Catdtype: string

>>> s.str.capitalize() # ⾸字母⼤写0 A1 B2 Aaba3 Baca4 5 Catdtype: string

>>> s.str.swapcase() # ⼤⼩写互换0 a1 b2 aABA3 bACA4 5 CATdtype: string

>>> s.str.casefold() # 转为⼩写,⽀持其他语⾔0 a1 b2 aaba3 baca4 5 cat

dtype: string

2.2. ⽂本对齐

⽂本对齐是指在⽂本显⽰的时候按照⼀定的规则进⾏对齐处理,⽐如左对齐、右对齐、居中等等

>>> s.str.center(10,fillchar='-') # 居中对齐,宽度为10,填充字符为'-'0 ----A-----1 ----B-----2 ---Aaba---3 ---Baca---4 5 ---cat----dtype: string

>>> s.str.ljust(10,fillchar='-') # 左对齐0 A---------1 B---------2 Aaba------3 Baca------4

5 cat-------dtype: string

>>> s.str.rjust(10,fillchar='-') # 右对齐0 ---------A1 ---------B2 ------Aaba3 ------Baca4 5 -------catdtype: string

>>> s.str.pad(width=10, side='left', fillchar='-') # 指定宽度,填充字符对齐⽅式为 left,填充字符为'-'0 ---------A1 ---------B2 ------Aaba3 ------Baca4 5 -------catdtype: string

>>> s.str.zfill(3) # 指定宽度3,不⾜则在前⾯添加00 00A1 00B2 Aaba3 Baca4 5 cat

dtype: string

2.3. 计数与编码

⽂本计数与内容编码

>>> s.str.count(\"a\") # 字符串中指定字母的数量0 01 02 23 24 5 1

dtype: Int64

>>> s.str.len() # 字符串的长度0 11 12 43 44 5 3

dtype: Int64

>>> s.str.encode('utf-8') # 编码0 b'A'1 b'B'2 b'Aaba'3 b'Baca'4 5 b'cat'dtype: object

>>> s.str.encode('utf-8').str.decode('utf-8') # 解码0 A1 B2 Aaba3 Baca4 5 cat

dtype: object

2.4. 格式判断

格式判断就是对字符串进⾏字符格式判断,⽐如是不是数字,是不是字母,是不是⼩数等等

>>> s = pd.Series(

... [\"A\... dtype=\"string\"... )

>>> s.str.isalpha() # 是否为字母0 True1 True

2 True3 False4 False5 6 True

dtype: boolean

>>> s.str.isnumeric() # 是否为数字0-90 False1 False2 False3 True4 True5 6 False

dtype: boolean

>>> s.str.isalnum() # 是否由数字或字母组成0 True1 True2 True3 True4 True5 6 True

dtype: boolean

>>> s.str.isdigit() # 是否为数字0 False1 False2 False3 True4 True5 6 False

dtype: boolean

>>> s.str.isdecimal() # 是否为⼩数0 False1 False2 False3 True4 True5 6 False

dtype: boolean

>>> s.str.isspace() # 是否为空格0 False1 False2 False3 False4 False5 6 False

dtype: boolean

>>> s.str.islower() # 是否为⼩写0 False1 False2 False3 False4 False5 6 True

dtype: boolean

>>> s.str.isupper() # 是否为⼤写0 True1 True2 False3 False4 False5 6 False

dtype: boolean

>>> s.str.istitle() # 是否为标题格式0 True1 True2 True3 False4 False5

6 False

dtype: boolean

以上这些字符串的⽅法其实和python原⽣的字符串⽅法基本相同。

3. ⽂本⾼级操作

⽂本⾼级操作包含⽂本拆分、⽂本替换、⽂本拼接、⽂本匹配与⽂本提取等,学会这些操作技巧,我们基本上就可以完成常见的复杂⽂本信息处理与分析了。

3.1. ⽂本拆分

⽂本拆分类似excel⾥的数据分列操作,将⽂本内容按照指定的字符进⾏分隔,具体⼤家可以看下⾯案例。⽅法split()返回的是⼀个列表

我们可以使⽤get 或 []符号访问拆分列表中的元素

我们还可以将拆分后的列表展开,需要使⽤参数expand

同样,我们可以限制分隔的次数,默认是从左开始(rsplit是从右到左),⽤到参数n

对于更复杂的拆分规格,我们可以在分隔符处传⼊正则表达式

补充:像str.slice()切⽚选择⽅法与str.partition()⽂本划分⽅法都有类似效果,⼤家可以⾃定查阅官⽅⽂档案例了解。

3.2. ⽂本替换

我们经常在数据处理中⽤到替换功能,将指定的⼀些数据替换成我们想要替换的内容。同样,在处理⽂本数据替换的时候,str.repalce()也可以很好的满⾜这⼀操作。

以上案例中,将regex参数设置为False就可以进⾏字⾯替换⽽不是对每个字符进⾏转义;反之,则需要转义,为正则替换。此外,我们还可以正则表达式替换,⽐如下⾯这个例⼦中我们实现的是对⽂本数据中英⽂部分进⾏倒序替换:

可能部分同学⽆法直观的理解上⾯的正则案例,这⾥简单的拆解介绍下:

关于正则表达式的⼀些介绍,⼤家还可以参考此前推⽂《》进⾏更多了解。

另外,我们还可以通过str.slice_replace()⽅法实现保留选定内容,替换剩余内容的操作:

补充:我们还可通过str.repeat()⽅法让原有的⽂本内容重复,具体⼤家可以⾃⾏体验

3.3. ⽂本拼接

⽂本拼接是指将多个⽂本连接在⼀起,基于str.cat()⽅法

⽐如,将⼀个序列的内容进⾏拼接,默认情况下会忽略缺失值,我们亦可指定缺失值

连接⼀个序列和另⼀个等长的列表,默认情况下如果有缺失值,则会导致结果中也有缺失值,不过可以通过指定缺失值na_rep的情况进⾏处理

连接⼀个序列和另⼀个等长的数组(索引⼀致)

索引对齐

在索引对齐中,我们还可以通过参数join来指定对齐形式,默认为左对齐left,还有outer, inner, right

3.4. ⽂本匹配

⽂本匹配这⾥我们介绍查询和包含判断,分别⽤到str.findall()、str.find()和str.contains()⽅法。⽂本查询,str.findall()返回查询到的值,str.find()返回匹配到的结果所在的位置(-1表⽰不存在)

⽂本包含,其实str.contain()常见于数据筛选中

此外,还有str.startwith()和str.endwith()⽤于指定开头还是结尾包含某字符的情况,⽽str.match()则可⽤于正则表达式匹配。

3.5. ⽂本提取

我们在⽇常中经常遇到需要提取某序列⽂本中特定的字符串,这个时候采⽤str.extract()⽅法就可以很好的进⾏处理,它是⽤正则表达式将⽂本中满⾜要求的数据提取出来形成单独的列。

⽐如下⾯这个案例,我们⽤正则表达式将⽂本分为两部分,第⼀部分是字母a和b,第⼆部分匹配数字:

在上述案例中,expand参数为Fasle时如果返回结果是⼀列则为Series,否则是Dataframe。我们还可以对提取的列进⾏命令,形式如P<列名称>,具体如下:

提取全部匹配项,会将⼀个⽂本中所有符合规则的内容匹配出来,最后形成⼀个多层索引数据:

我们还可以从字符串列中提取虚拟变量,例如⽤\"|\"分隔(第⼀⾏abc只有a,第⼆⾏有a和b,第三⾏都没有,第四⾏有a和c):

以上就是本次全部内容,相信⼤家在熟练这些⽂本数据处理的操作后,在⽇常⼯作中对于⽂本数据的处理将会⾮常得⼼应⼿。

总结

到此这篇关于Pandas⽂本数据处理的⽂章就介绍到这了,更多相关Pandas⽂本数据处理内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

因篇幅问题不能全部显示,请点此查看更多更全内容

Top