pandas 文本处理大全(附代码)

大家好,我是东哥。

继续更新 pandas数据清洗,历史文章:

感兴趣可以关注这个话题pandas数据清洗,第一时间看到更新。

所有数据和代码可在我的 GitHub获取:

https://github.com/xiaoyusmd/PythonDataScience

本次来介绍关于文本处理的常用方法。

文本的主要两个类型是 stringobject。如果不特殊指定类型为 string,文本类型一般为 object

文本的操作主要是通过 访问器 str 来实现的,功能十分强大,但使用前需要注意以下几点。

  1. 访问器只能对 Series 数据结构使用。 除了常规列变量 df.col以外,也可以对索引类型 df.Indexdf.columns使用
  2. 确保访问的对象类型是字符串 str 类型。 如果不是需要先 astype(str)转换类型,否则会报错
  3. 访问器可以多个连接使用。df.col.str.lower().str.upper(),这个和 Dataframe中的一行操作是一个原理

下面正式介绍文本的各种骚操作,基本可以涵盖日常95%的数据清洗需要了,一共 8 个场景。

pandas 文本处理大全(附代码)

以下操作均基于下面的数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({'name':['jordon', 'MIKE', 'Kelvin', 'xiaoLi', 'qiqi','Amei'],
                   'Age':[18, 30, 45, 23, 45, 62],
                   'level':['high','Low','M','L','middle',np.nan],
                   'Email':['jordon@sohu.com','Mike@126.cn','KelvinChai@gmail.com','xiaoli@163.com',np.nan,'amei@qq.com']})
Index(['name', 'age', 'level', 'email'], dtype='object')

格式判断

下面均为判断操作,因此返回布尔值。

s.str.isalpha
s.str.isnumeric
s.str.isalnum
s.str.isupper
s.str.islower
s.str.isdigit

对齐


s.str.center(, fillchar='*')

s.str.ljust(8, fillchar='*')

s.str.rjust(8, fillchar='*')

s.str.pad(width=8, side='both',fillchar='*')

df.name.str.center(8, fillchar='*')
0         [jordon, sohu.com]
1            [Mike, 126.cn]
2    [KelvinChai, gmail.com]
3          [xiaoli, 163.com]
4                        NaN
5             [amei, qq.com]

df.Email.str.split('@' ,expand=True)
   0              1      2
0    jordon      sohu     com
1    Mike          126     cn
2    KelvinChai  gmail   com
3    xiaoli      163       com
4    NaN            NaN    NaN
5    amei          qq       com

3、文本替换

文本替换有几种方法: replaceslice_replacerepeat

replace替换

replace方法是最常用的替换方法,参数如下:

  • pal:为被替代的内容字符串,也可以为正则表达式
  • repl:为新内容字符串,也可以是一个被调用的函数
  • regex:用于设置是否支持正则,默认是 True

df.Email.str.replace('com','cn')
0     xxx@sohu.com
1       xxx@126.cn
2    xxx@gmail.com
3      xxx@163.com
4              NaN
5       xxx@qq.com

或者将新内容写成 被调用的函数

df.Email.str.replace('(.*?)@', lambda x:x.group().upper())
0         jXXrdon@sohu.com
1             MXXke@126.cn
2    KXXlvinChai@gmail.com
3          xXXaoli@163.com
4                      NaN
5             aXXei@qq.com

重复替换

repeat可以实现重复替换的功能,参数 repeats设置重复的次数。

df.name.str.repeat(repeats=2)
'jordonMIKEKelvinxiaoLiqiqiAmei'

df.name.str.cat(sep='-')
'high-Low-M-L-middle-*'

2. 拼接序列和其他类列表型对象为新的序列

下面先将name列和 *列拼接,再将 level列拼接,形成一个新的序列。


df.name.str.cat(['*']*6).str.cat(df.level)
0      jordonhighjordon@sohu.com
1             MIKELowMike@126.cn
2    KelvinMKelvinChai@gmail.com
3          xiaoLiLxiaoli@163.com
4                    qiqimiddle*
5               Amei*amei@qq.com

将一个序列与多个对象拼接为一个新的序列

5、文本提取

文本提取主要通过 extract来实现的。

extract参数:

  • pat: 通过正则表达式实现一个提取的pattern
  • flags: 正则库 re中的标识,比如 re.IGNORECASE
  • expand: 当正则只提取一个内容时,如果 expand=True会展开返回一个 DataFrame,否则返回一个 Series

df.Email.str.extract(pat='(.*?)@(.*).com')
    Email                     @position
0     jordon@sohu.com           6.0
1     Mike@126.cn               4.0
2     KelvinChai@gmail.com     10.0
3     xiaoli@163.com             6.0
4     NaN                       NaN
5     amei@qq.com               4.0

上面示例返回 @在email变量中的位置。

另外一个查找方法是 findall

findall参数:

  • pat: 要查找的内容,支持正则表达式
  • flag: 正则库 re中的标识,比如 re.IGNORECASE

findallfind的区别是支持正则表达式,并返回具体内容。这个方法有点类似 extract,也可以用于提取,但不如 extract方便。

df.Email.str.findall('(.*?)@(.*).com')
0     True
1    False
2     True
3     True
4        *
5     True

df.loc[df.Email.str.contains('jordon|com', na=False)]
     Amei   Kelvin  MIKE    jordon  qiqi    xiaoLi
0     0     0       0       1       0       0
1     0     0       1       0       0       0
2     0     1       0       0       0       0
3     0     0       0       0       0       1
4     0     0       0       0       1       0
5     1     0       0       0       0       0

以上就是本次分享内容。

原创不易,欢迎点赞、留言、分享,支持我继续写下去。

感兴趣可以关注这个话题pandas数据清洗,第一时间看到更新。

所有数据和代码可在我的 GitHub获取:

https://github.com/xiaoyusmd/PythonDataScience

Original: https://blog.csdn.net/yuxiaosmd/article/details/123172469
Author: Python数据科学
Title: pandas 文本处理大全(附代码)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/738207/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球