如何移除Pandas指定列每行的特定字符(连字符、年份前缀数字)
问题原因与解决步骤
1. astype转换未生效的原因
你调用astype()后没有将返回的新对象赋值回原数据/列,该方法默认不会修改原DataFrame,仅返回修改类型后的新对象,仅打印dtypes不会改变原数据的类型。
2. 正确处理流程
第一步:转换为字符串类型
推荐使用pandas专属的字符串类型,避免object类型混合非字符串元素导致后续字符串操作报错:
# 转换列类型为字符串,赋值回原列生效 app_df_new['personalnumber'] = app_df_new['personalnumber'].astype('string')
第二步:移除所有连字符
直接替换普通字符串即可,关闭正则解析避免不必要的转义问题:
# 替换所有连字符为空 app_df_new['personalnumber'] = app_df_new['personalnumber'].str.replace('-', '', regex=False)
第三步:删除开头的年份前缀19
两种方案按需选择:
- 如果确认所有号码去连字符后均为
19开头的12位字符,直接切片取第三位及之后的内容:
app_df_new['personalnumber'] = app_df_new['personalnumber'].str.slice(start=2)
- 如果存在非
19开头的号码,用正则匹配仅替换开头的19,避免误删中间的19字符:
app_df_new['personalnumber'] = app_df_new['personalnumber'].str.replace(r'^19', '', regex=True)
3. 结果验证
运行以下代码确认处理结果符合预期:
# 查看列类型 print(app_df_new['personalnumber'].dtype) # 查看前10条处理后的数据 print(app_df_new['personalnumber'].head(10))
内容的提问来源于stack exchange,提问作者Sevgi Camuz
相关产品推荐
相关产品推荐

