跳转至

Pandas 字符串操作

概念与用途

str 访问器对 Series 执行向量化字符串清洗、匹配、提取、拆分和替换。使用 Pandas string dtype 可获得统一的 pd.NA 缺失语义。

核心 API

str.strip、lower、contains、match、extract、replace、split、get_dummies、len。

可运行示例

import pandas as pd

s = pd.Series(["  Alice <a@example.com> ", None], dtype="string")
clean = s.str.strip()
email = clean.str.extract(r"<([^>]+)>", expand=False)
name = clean.str.replace(r"\s*<.*>$", "", regex=True).str.lower()
print(pd.DataFrame({"name": name, "email": email}))

示例二:拆分并保留索引

import pandas as pd

s = pd.Series(["A-100", "B-205", None], index=[10, 20, 30], dtype="string")
parts = s.str.extract(r"^(?P<group>[A-Z])-(?P<number>\d+)$")
parts["number"] = pd.to_numeric(parts["number"], errors="coerce").astype("Int64")
print(parts)
assert parts.index.equals(s.index)

str.extract(expand=True) 返回 DataFrame 并保留原索引;没有匹配的行填充缺失值。命名捕获组直接成为列名。

dtype、空值与性能

StringDtype 使用 pd.NA,object 列则可能混入非字符串对象。str.split(expand=True) 的列数由最大拆分数决定,宽度不受控时可能占用大量内存。固定字符串替换应使用 regex=False,复杂正则应预先编译或限制模式与输入长度。

注意事项

明确 regex=True/False,避免版本差异或特殊字符被当作正则。str.contains 遇到空值可用 na=False 控制掩码。复杂或用户提供的正则可能造成灾难性回溯;限制模式和输入长度。Unicode 大小写、空白和规范化有语言差异,身份匹配不能只靠 lower()。