Pandas文本数据处理全指南:从类型到高级操作

夏知夏
夏知夏
发布时间:2026-10-15 | 6人浏览过
原创

本文详解Pandas中处理文本数据的完整流程。涵盖object与string类型差异、大小写转换与对齐等基础字符串方法,深入讲解split、replace、cat等拆分替换拼接技巧,以及利用正则表达式进行match、extract和虚拟变量提取的高级操作,助力高效数据清洗与分析。

前言

在日常工作场景中,我们经常需要处理各类文本信息,从中解析出关键数据以支持后续的分析工作。

文本解析往往是一项繁琐且容易出错的任务,而Pandas提供了针对此类数据的强大处理工具,接下来我们将一同探索这些实用的处理方法。

1. 文本数据类型

在Pandas中,存储文本数据主要有两种类型:object和string。在Pandas 1.0版本之前,object是唯一的文本存储类型,当列中包含数值与文本混合数据时,默认也会被识别为object类型。自Pandas 1.0版本起,引入了专门的string类型,旨在提供更优的字符串处理支持。

1.1. 类型简介

默认情况下,Pandas仍使用object作为文本数据的默认存储类型。

若需指定使用string类型,可以在创建数据时通过dtype参数进行设置。

对于已创建的Series或DataFrame,我们也可以使用astype方法强制转换为string类型。

此外,Pandas还提供了df.convert_dtypes()方法,能够根据数据内容智能推断并选择最合适的数据类型。

1.2. 类型差异

string类型与object类型在操作行为上存在显著差异。

对于返回数值结果的字符串访问器方法,string类型始终返回可为空的整数类型(Int64);而object类型则根据是否存在NA值,返回int或float类型。

对于返回布尔结果的方法,string类型会返回可为空的布尔数据类型(boolean),而object类型则返回标准的bool类型。

2. 字符串方法

Series和Index对象均提供了丰富的字符串处理方法,通过str属性即可访问。这些方法的一个关键特性是会自动忽略缺失值(NA),从而简化数据处理流程。

2.1. 文本格式

文本格式化处理主要涉及字符串的大小写转换等操作,例如将文本统一转为大写或小写。


>>> s = pd.Series(
...     ["A", "B", "Aaba", "Baca", np.nan, "cat"],
...     dtype="string"
... )
>>> s.str.lower() # 转小写
0       a
1       b
2    aaba
3    baca
4    <NA>
5     cat
dtype: string
>>> s.str.upper() # 转大写
0       A
1       B
2    AABA
3    BACA
4    <NA>
5     CAT
dtype: string
>>> s.str.title() # 每个单词大写
0       A
1       B
2    Aaba
3    Baca
4    <NA>
5     Cat
dtype: string
>>> s.str.capitalize() # 首字母大写
0       A
1       B
2    Aaba
3    Baca
4    <NA>
5     Cat
dtype: string
>>> s.str.swapcase() # 大小写互换
0       a
1       b
2    aABA
3    bACA
4    <NA>
5     CAT
dtype: string
>>> s.str.casefold() # 转为小写,支持其他语言
0       a
1       b
2    aaba
3    baca
4    <NA>
5     cat
dtype: string

2.2. 文本对齐

文本对齐功能允许在显示文本时按照特定规则进行排版,包括左对齐、右对齐和居中对齐等样式。


>>> s.str.center(10,fillchar='-') # 居中对齐,宽度为10,填充字符为'-'
0    ----A-----
1    ----B-----
2    ---Aaba---
3    ---Baca---
4          <NA>
5    ---cat----
dtype: string
>>> s.str.ljust(10,fillchar='-') # 左对齐
0    A---------
1    B---------
2    Aaba------
3    Baca------
4          <NA>
5    cat-------
dtype: string
>>> s.str.rjust(10,fillchar='-') # 右对齐
0    ---------A
1    ---------B
2    ------Aaba
3    ------Baca
4          <NA>
5    -------cat
dtype: string
>>> s.str.pad(width=10, side='left', fillchar='-') # 指定宽度,填充字符对齐方式为 left,填充字符为'-'
0    ---------A
1    ---------B
2    ------Aaba
3    ------Baca
4          <NA>
5    -------cat
dtype: string
>>> s.str.zfill(3) # 指定宽度3,不足则在前面添加0
0     00A
1     00B
2    Aaba
3    Baca
4    <NA>
5     cat
dtype: string

2.3. 计数与编码

文本计数与编码功能用于统计字符串长度、字符出现次数,以及进行字符编码与解码操作。


>>> s.str.count("a") # 字符串中指定字母的数量
0       0
1       0
2       2
3       2
4    <NA>
5       1
dtype: Int64
>>> s.str.len() # 字符串的长度
0       1
1       1
2       4
3       4
4    <NA>
5       3
dtype: Int64
>>> s.str.encode('utf-8') # 编码
0       b'A'
1       b'B'
2    b'Aaba'
3    b'Baca'
4       <NA>
5     b'cat'
dtype: object
>>> s.str.encode('utf-8').str.decode('utf-8') # 解码
0       A
1       B
2    Aaba
3    Baca
4    <NA>
5     cat
dtype: object    

2.4. 格式判断

格式判断功能用于检测字符串是否符合特定格式,例如判断其是否仅包含数字、字母、小数或空格等。


>>> s = pd.Series(
...     ["A", "B", "Aaba", 12, 5, np.nan, "cat"],
...     dtype="string"
... )
>>> s.str.isalpha() # 是否为字母
0     True
1     True
2     True
3    False
4    False
5     <NA>
6     True
dtype: boolean
>>> s.str.isnumeric() # 是否为数字0-9
0    False
1    False
2    False
3     True
4     True
5     <NA>
6    False
dtype: boolean
>>> s.str.isalnum() # 是否由数字或字母组成
0    True
1    True
2    True
3    True
4    True
5    <NA>
6    True
dtype: boolean
>>> s.str.isdigit() # 是否为数字
0    False
1    False
2    False
3     True
4     True
5     <NA>
6    False
dtype: boolean
>>> s.str.isdecimal() # 是否为小数
0    False
1    False
2    False
3     True
4     True
5     <NA>
6    False
dtype: boolean
>>> s.str.isspace() # 是否为空格
0    False
1    False
2    False
3    False
4    False
5     <NA>
6    False
dtype: boolean
>>> s.str.islower() # 是否为小写
0    False
1    False
2    False
3    False
4    False
5     <NA>
6     True
dtype: boolean
>>> s.str.isupper() # 是否为大写
0     True
1     True
2    False
3    False
4    False
5     <NA>
6    False
dtype: boolean
>>> s.str.istitle() # 是否为标题格式
0     True
1     True
2     True
3    False
4    False
5     <NA>
6    False
dtype: boolean

上述字符串处理方法在功能上与Python原生字符串方法基本一致,但在Pandas中针对Series进行了向量化优化。

3. 文本高级操作

文本高级操作涵盖了拆分、替换、拼接、匹配与提取等核心功能。掌握这些技巧,即可应对大多数复杂的文本信息处理与分析需求。

3.1. 文本拆分

文本拆分功能类似于Excel中的数据分列,允许按照指定字符或规则将文本分割。具体实现可参考以下案例。

split()方法返回的结果是一个列表对象。

我们可以通过get方法或索引符号[]来访问拆分后列表中的特定元素。

若希望将拆分后的列表直接展开为多列,需使用expand参数。

同样,我们可以限制拆分的次数,默认从左向右分割,若需从右向左可使用rsplit,通过n参数控制分割次数。

对于更复杂的分割需求,可以在分隔符参数中传入正则表达式以实现灵活拆分。

补充说明:str.slice()切片选择方法与str.partition()文本划分方法也能实现类似效果,建议查阅官方文档案例以深入了解。

3.2. 文本替换

在数据处理中,替换指定内容是一项常见需求。对于文本数据,str.repalce()方法同样能高效满足这一操作。

在上述案例中,若将regex参数设置为False,则执行字面量替换(不进行正则转义);若为True,则执行正则表达式替换。

此外,我们还可以结合正则表达式进行复杂替换,例如以下示例展示了如何将文本中的英文部分进行倒序处理。

若对上述正则案例的理解存在困难,此处提供简要拆解说明。

关于正则表达式的更多用法,可参考此前的相关文章《》以获取更深入的知识。

另外,我们还可以利用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参数为False时,若返回结果仅为一列,则类型为Series;否则为DataFrame。

我们还可以对提取的列进行命名,格式如?P<列名称>所示,具体操作如下。

提取全部匹配项的功能会将文本中所有符合规则的内容匹配出来,最终形成多层索引数据。

我们还可以从字符串列中提取虚拟变量,例如使用"|"作为分隔符(第一行abc仅含a,第二行含a和b,第三行均无,第四行含a和c)。

以上就是本次关于Pandas文本数据处理的全部内容。相信熟练运用这些操作后,您在日常工作中处理文本数据将更加得心应手。

总结

至此,关于Pandas文本数据处理的介绍已告一段落。如需了解更多相关内容,请搜索本站历史文章或继续浏览后续文章,感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表