如何在Pandas DataFrame的ID列中按文本数字切换插入短横线
问题
我有一个如下所示的Pandas DataFrame(为大型数据集的示例):
import pandas as pd df = pd.DataFrame({"ID":["4SSS50FX","2TT1897FA"], "VALUE":[13, 56]}) # 输出: # ID VALUE # 0 4SSS50FX 13 # 1 2TT1897FA 56
我希望在df["ID"]的字符串中,每当文本与数字相互切换的位置插入-,预期输出如下:
ID VALUE 0 4-SSS-50-FX 13 1 2-TT-1897-FA 56
不想针对每种情况写特定条件,想自动化处理所有样本,求解决方法。
解决方案
用正则表达式的正向零宽断言就能完美解决这个需求,无需编写大量条件判断。正则可以精准识别数字与字母的切换边界,自动在对应位置插入分隔符。
直接调用Pandas的str.replace方法配合正则即可实现批量处理:
import pandas as pd df = pd.DataFrame({"ID":["4SSS50FX","2TT1897FA"], "VALUE":[13, 56]}) # 核心代码:匹配数字/字母的切换边界并插入- df["ID"] = df["ID"].str.replace(r'(?<=\d)(?=[A-Za-z])|(?<=[A-Za-z])(?=\d)', '-', regex=True) print(df)
正则规则解释
(?<=\d)(?=[A-Za-z]):匹配前面是数字、后面是字母的空白位置(?<=[A-Za-z])(?=\d):匹配前面是字母、后面是数字的空白位置- 用
|合并两个条件,只要满足任一情况就替换为-,实现所有数字/字母切换位置的自动分隔。
运行结果
ID VALUE 0 4-SSS-50-FX 13 1 2-TT-1897-FA 56
该方法完全通用,无论字符串中数字与字母切换多少次都能适配,适合大型数据集的批量处理。
内容的提问来源于stack exchange,提问作者user026
相关产品推荐
相关产品推荐

