如何为DataFrame列中缺失连字符的记录补全格式?
解决方案
方法一:正则表达式替换(最简便)
利用pandas的str.replace结合正则,直接匹配7位无连字符的记录,自动拆分并插入连字符:
import pandas as pd # 示例DataFrame df = pd.DataFrame({'code': ['abcd-efg', 'abcdefg', 'hijk-lmn', 'hijklmn']}) # 批量转换格式:将7位无连字符的字符串转为xxxx-xxx df['code'] = df['code'].str.replace(r'^(\w{4})(\w{3})$', r'\1-\2', regex=True)
- 正则
^(\w{4})(\w{3})$精准匹配7位无连字符的记录(\w匹配字母/数字/下划线,若只匹配数字可换成\d) - 替换逻辑:把7位字符串拆分为前4位和后3位,中间插入连字符,刚好符合
xxxx-xxx格式
方法二:条件切片替换
如果需要更明确的条件控制,先筛选出目标记录再插入连字符:
# 筛选出长度为7且不含连字符的记录 mask = (df['code'].str.len() == 7) & (~df['code'].str.contains('-')) # 在第4位后插入连字符(对应xxxx-xxx的格式) df.loc[mask, 'code'] = df.loc[mask, 'code'].str.slice_replace(start=4, stop=4, repl='-')
slice_replace(start=4, stop=4)表示在字符串的第4个字符位置(0索引)插入内容,刚好把7位字符串分成前4后3
以上两种方法都是pandas矢量化操作,比循环遍历效率高得多,适合处理大规模数据集。
内容的提问来源于stack exchange,提问作者PythonDeveloper
相关产品推荐
相关产品推荐

