Pandas Series.str.split() 函数
Series.str.split() 是 Pandas 中用于拆分字符串的函数。
在数据处理过程中,我们经常需要将一个字符串拆分成多个部分,比如将句子拆分成单词、将逗号分隔的值拆分成列表等。split() 函数可以按照指定的分隔符将字符串拆分成多个部分。
单词释义:split 是"分开、拆分"的意思,表示将字符串分割成多个部分。
基本语法与参数
str.split() 是 Series 的字符串访问器方法,因此你需要先有一个包含字符串的 Series,然后通过 .str 访问器来调用它。
语法格式
Series.str.split(pat=None, n=-1, expand=False)
参数说明
| 参数 | 类型 | 是否必填 | 说明 | 默认值 |
|---|---|---|---|---|
| pat | str | 可选 | 分隔符,可以是字符串或正则表达式。默认为空白字符。 | None(空白字符) |
| n | int | 可选 | 拆分的次数。-1 表示不限制,拆分为尽可能多的部分。 | -1 |
| expand | bool | 可选 | 是否将结果展开为 DataFrame。默认为 False(返回 Series of lists)。 | False |
函数说明
- 返回值:默认返回一个包含列表的 Series,列表中的每个元素是拆分后的子串。当
expand=True时返回一个 DataFrame。 - 效果:按照指定的分隔符将每个字符串拆分成多个部分。
- 注意:默认使用空白字符作为分隔符,可以自定义分隔符。
实例
让我们通过一系列从简单到复杂的例子,彻底掌握 str.split() 的用法。
示例 1:基础用法 - 按空白字符拆分
实例
import pandas as pd
# 创建一个包含句子的 Series
s = pd.Series(['hello world', 'runoob python', 'pandas data analysis'])
# 按空白字符拆分(默认行为)
result = s.str.split()
print("原始 Series:")
print(s)
print("n拆分后的结果:")
print(result)
# 创建一个包含句子的 Series
s = pd.Series(['hello world', 'runoob python', 'pandas data analysis'])
# 按空白字符拆分(默认行为)
result = s.str.split()
print("原始 Series:")
print(s)
print("n拆分后的结果:")
print(result)
输出结果:
原始 Series: 0 hello world 1 runoob python 2 pandas data analysis dtype: object 拆分后的结果: 0 [hello, world] 1 [runoob, python] 2 [pandas, data, analysis]
代码解析:
s.str.split()默认按空白字符(空格、制表符等)拆分字符串。- 返回的是一个包含列表的 Series,每个列表包含拆分后的子串。
- 'pandas data analysis' 被拆分成三个部分。
示例 2:按指定分隔符拆分
可以通过 pat 参数指定自定义的分隔符。
实例
import pandas as pd
# 创建包含逗号分隔值的 Series
s = pd.Series(['apple,banana,orange', 'dog,cat,bird', 'red,green,blue'])
# 按逗号拆分
result = s.str.split(',')
print("原始 Series:")
print(s)
print("n按逗号拆分后的结果:")
print(result)
# 创建包含逗号分隔值的 Series
s = pd.Series(['apple,banana,orange', 'dog,cat,bird', 'red,green,blue'])
# 按逗号拆分
result = s.str.split(',')
print("原始 Series:")
print(s)
print("n按逗号拆分后的结果:")
print(result)
输出结果:
原始 Series: 0 apple,banana,orange 1 dog,cat,bird 2 red,green,blue dtype: object 拆分后的结果: 0 [apple, banana, orange] 1 [dog, cat, bird] 2 [red, green, blue]
代码解析:
s.str.split(',')按逗号拆分每个字符串。- 这是处理 CSV 数据或逗号分隔值的常用方法。
示例 3:限制拆分次数
通过 n 参数可以限制拆分的次数。
实例
import pandas as pd
s = pd.Series(['a,b,c,d,e', '1,2,3,4,5'])
# 限制只拆分为 2 部分
result_2 = s.str.split(',', n=2)
# 限制只拆分为 1 部分(即只拆分一次)
result_1 = s.str.split(',', n=1)
print("原始 Series:")
print(s)
print("n限制拆分为 2 部分:")
print(result_2)
print("n限制拆分为 1 部分:")
print(result_1)
s = pd.Series(['a,b,c,d,e', '1,2,3,4,5'])
# 限制只拆分为 2 部分
result_2 = s.str.split(',', n=2)
# 限制只拆分为 1 部分(即只拆分一次)
result_1 = s.str.split(',', n=1)
print("原始 Series:")
print(s)
print("n限制拆分为 2 部分:")
print(result_2)
print("n限制拆分为 1 部分:")
print(result_1)
输出结果:
原始 Series: 0 a,b,c,d,e 1 1,2,3,4,5 dtype: object 限制拆分为 2 部分: 0 [a, b, c,d,e] 1 [1, 2, 3,4,5] 限制拆分为 1 部分: 0 [a, b,c,d,e] 1 [1, 2,3,4,5]
代码解析:
n=2表示最多拆分成 2 个部分,最后一个部分包含剩余的所有内容。n=1表示只在第一个分隔符处拆分,得到 2 个部分。
示例 4:展开为 DataFrame
当 expand=True 时,拆分结果会展开为 DataFrame。
实例
import pandas as pd
# 创建包含逗号分隔值的 Series
s = pd.Series(['apple,banana,orange', 'dog,cat,bird', 'red,green,blue'])
# 展开为 DataFrame
result = s.str.split(',', expand=True)
print("原始 Series:")
print(s)
print("n展开为 DataFrame:")
print(result)
print("nDataFrame 类型:", type(result))
# 创建包含逗号分隔值的 Series
s = pd.Series(['apple,banana,orange', 'dog,cat,bird', 'red,green,blue'])
# 展开为 DataFrame
result = s.str.split(',', expand=True)
print("原始 Series:")
print(s)
print("n展开为 DataFrame:")
print(result)
print("nDataFrame 类型:", type(result))
输出结果:
原始 Series:
0 apple,banana,orange
1 dog,cat,bird
2 red,green,blue
dtype: object
展开为 DataFrame:
0 1 2
0 apple banana orange
1 dog cat bird
2 red green blue
DataFrame 类型: <class 'pandas.core.frame.DataFrame'>
代码解析:
expand=True将拆分结果展开为 DataFrame。- 每一列代表拆分后的一个位置。
- 这在处理结构化数据时非常有用。
示例 5:使用正则表达式拆分
split() 也支持使用正则表达式作为分隔符。
实例
import pandas as pd
# 创建包含不同分隔符的 Series
s = pd.Series(['hello-world', 'runoob_python', 'pandas#tutorial'])
# 按正则表达式拆分(匹配 -、_、# 中的任意一个)
result = s.str.split(r'[-_#]')
print("原始 Series:")
print(s)
print("n按正则表达式拆分:")
print(result)
# 创建包含不同分隔符的 Series
s = pd.Series(['hello-world', 'runoob_python', 'pandas#tutorial'])
# 按正则表达式拆分(匹配 -、_、# 中的任意一个)
result = s.str.split(r'[-_#]')
print("原始 Series:")
print(s)
print("n按正则表达式拆分:")
print(result)
输出结果:
原始 Series: 0 hello-world 1 runoob_python 2 pandas#tutorial dtype: object 按正则表达式拆分: 0 [hello, world] 1 [runoob, python] 2 [pandas, tutorial]
代码解析:
r'[-_#]'是正则表达式,匹配 '-'、'_' 或 '#' 中的任意一个字符。- 可以同时处理多种不同的分隔符。
示例 6:处理真实数据
在实际应用中,split() 经常与其他函数结合使用。
实例
import pandas as pd
# 模拟从日志中提取的数据
logs = pd.Series([
'2024-01-01 10:30:45 ERROR Connection failed',
'2024-01-01 10:31:12 INFO User logged in',
'2024-01-01 10:32:00 WARNING Memory usage high'
])
# 拆分日志内容
log_parts = logs.str.split(r's+', expand=True)
print("原始日志:")
print(logs)
print("n拆分后的 DataFrame:")
print(log_parts)
# 重命名列
log_parts.columns = ['timestamp', 'level', 'message']
print("n重命名后的结果:")
print(log_parts)
# 模拟从日志中提取的数据
logs = pd.Series([
'2024-01-01 10:30:45 ERROR Connection failed',
'2024-01-01 10:31:12 INFO User logged in',
'2024-01-01 10:32:00 WARNING Memory usage high'
])
# 拆分日志内容
log_parts = logs.str.split(r's+', expand=True)
print("原始日志:")
print(logs)
print("n拆分后的 DataFrame:")
print(log_parts)
# 重命名列
log_parts.columns = ['timestamp', 'level', 'message']
print("n重命名后的结果:")
print(log_parts)
输出结果:
原始日志:
0 2024-01-01 10:30:45 ERROR Connection failed
1 2024-01-01 10:31:12 INFO User logged in
2 2024-01-01 10:32:00 WARNING Memory usage high
dtype: object
拆分后的 DataFrame:
0 1 2
0 2024-01-01 10:30:45 ERROR Connection failed
1 2024-01-01 10:31:12 INFO User logged in
2 2024-01-01 10:32:00 WARNING Memory usage high
重命名后的结果:
timestamp level message
0 2024-01-01 10:30:45 ERROR Connection failed
1 2024-01-01 10:31:12 INFO User logged in
2 2024-01-01 10:32:00 WARNING Memory usage high
代码解析:
r's+'匹配一个或多个空白字符,将日志拆分成多个部分。expand=True将拆分结果展开为 DataFrame。- 通过重命名列,可以方便地访问和处理各个部分。
注意事项
str.split()默认使用空白字符作为分隔符。- 当
expand=False时,返回一个包含列表的 Series。 - 当
expand=True时,返回一个 DataFrame,列数取决于最长拆分结果。 - 如果字符串不包含分隔符,返回的列表只有一个元素(原始字符串)。
- 正则表达式可以作为分隔符,提供更灵活的拆分方式。
- 如果 Series 中包含 NaN 值,返回 NaN。

Pandas 常用函数