如何在Python DataFrame指定列中替换并截取字符串?
Pandas 指定列字符串处理与整表导出方案
需求
对DataFrame中*Customer Code列的字符串执行以下操作:
- 将开头的
0替换为GIF - 截取前5个字符(例:
0369BODMIN→GIF369) - 要求结合正则表达式实现,且导出完整DataFrame而非单列
问题分析
你的代码中直接将customer_data替换为目标列的Series,导致导出仅包含该列,而非整个数据表:
import pandas as pd customer_data = pd.read_csv(r'C://customers.csv') # 错误:覆盖了整个DataFrame,只剩单列 customer_data = customer_data['*Customer Code'].apply(lambda x: x.replace('0','GIF',1)[:6]) customer_data.to_csv('customersMerged.csv', index=False)
解决方案
方案1:正则表达式实现(推荐)
用正则精准匹配开头的0进行替换,再截取前5位,直接修改原列,保留整个DataFrame:
import pandas as pd customer_data = pd.read_csv(r'C://customers.csv') # 正则替换开头的0为GIF,再截取前5个字符 customer_data['*Customer Code'] = customer_data['*Customer Code'].str.replace(r'^0', 'GIF', regex=True).str[:5] # 导出完整DataFrame customer_data.to_csv('customersMerged.csv', index=False)
^0:正则锚定字符串开头的0,避免替换字符串中间的0.str[:5]:截取前5个字符,直接得到目标结果
方案2:优化原lambda写法
如果想保留原替换逻辑,只需修改赋值方式,不覆盖整个DataFrame:
import pandas as pd customer_data = pd.read_csv(r'C://customers.csv') # 直接修改目标列,不替换整个DataFrame customer_data['*Customer Code'] = customer_data['*Customer Code'].apply(lambda x: x.replace('0','GIF',1)[:5]) customer_data.to_csv('customersMerged.csv', index=False)
- 注意将原代码的
[:6]改为[:5],匹配示例中5位的输出要求
内容的提问来源于stack exchange,提问作者Greyville
相关产品推荐
相关产品推荐

