Skip to content

字符串处理

Pandas 提供了强大的字符串处理功能,通过 .str 访问器可以方便地操作字符串数据。

基础操作

python
import pandas as pd

df = pd.DataFrame({
    '姓名': [' 张三 ', '李四', '王五'],
    '邮箱': ['zhangsan@email.com', 'lisi@test.com', 'wangwu@demo.com']
})

# 去除空白
df['姓名'] = df['姓名'].str.strip()

# 转换大小写
df['邮箱大写'] = df['邮箱'].str.upper()
df['邮箱小写'] = df['邮箱'].str.lower()

print(df)

字符串长度

python
df['姓名长度'] = df['姓名'].str.len()
print(df)

字符串切片

python
# 提取前两个字符
df['姓氏'] = df['姓名'].str[:1]

# 提取邮箱用户名
df['用户名'] = df['邮箱'].str.split('@').str[0]

print(df)

字符串查找

python
# 检查是否包含
df['是否含张'] = df['姓名'].str.contains('张')

# 检查开头
df['是否以张开头'] = df['姓名'].str.startswith('张')

# 检查结尾
df['是否以com结尾'] = df['邮箱'].str.endswith('.com')

# 查找位置
df['@位置'] = df['邮箱'].str.find('@')

print(df)

字符串替换

python
# 替换字符串
df['新邮箱'] = df['邮箱'].str.replace('email.com', 'newmail.com')

# 使用正则表达式
df['纯用户名'] = df['邮箱'].str.replace(r'@.*', '', regex=True)

print(df)

字符串分割

python
df = pd.DataFrame({
    '信息': ['张三-25-北京', '李四-30-上海', '王五-35-广州']
})

# 分割字符串
expanded = df['信息'].str.split('-', expand=True)
expanded.columns = ['姓名', '年龄', '城市']
print(expanded)

字符串连接

python
df = pd.DataFrame({
    '姓': ['张', '李', '王'],
    '名': ['三', '四', '五']
})

# 连接字符串
df['全名'] = df['姓'] + df['名']

# 使用join
df['全名带符号'] = df[['姓', '名']].agg('-'.join, axis=1)

print(df)

正则表达式

python
df = pd.DataFrame({
    '文本': ['电话:13800138000', '手机:13900139000', '座机:010-12345678']
})

# 提取数字
df['号码'] = df['文本'].str.extract(r'(\d+)')

# 提取所有匹配
df['所有数字'] = df['文本'].str.findall(r'\d+')

# 检查匹配
df['是否手机号'] = df['文本'].str.match(r'.*1[3-9]\d{9}')

print(df)

填充和对齐

python
df = pd.DataFrame({
    '编号': ['A1', 'A12', 'A123']
})

# 左填充
df['左填充'] = df['编号'].str.pad(5, side='left', fillchar='0')

# 右填充
df['右填充'] = df['编号'].str.pad(5, side='right', fillchar='0')

# 居中对齐
df['居中'] = df['编号'].str.center(5, fillchar='-')

print(df)

字符串处理是数据清洗的重要环节,掌握这些方法可以高效地处理文本数据。