Appearance
字符串处理
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)字符串处理是数据清洗的重要环节,掌握这些方法可以高效地处理文本数据。