You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:54:03