现在位置: 首页 > Pandas 教程 > 正文

Pandas Series.str.split() 函数

Pandas 常用函数 Pandas 常用函数


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:
0         hello world
1      runoob python
2    pandas data analysis
dtype: object

拆分后的结果:
0         [hello, world]
1    [runoob, python]
2    [pandas, data, analysis]

代码解析:

  1. s.str.split() 默认按空白字符(空格、制表符等)拆分字符串。
  2. 返回的是一个包含列表的 Series,每个列表包含拆分后的子串。
  3. '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:
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)

输出结果:

原始 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:
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:
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)

输出结果:

原始日志:
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 常用函数 Pandas 常用函数