Python Pandas中格式化字符串数字:去除前导零
解决Pandas去除字符串列前导零的问题
嘿,我懂你遇到的困扰啦——之前用链式索引赋值没生效对吧?这是因为Pandas里连续用两个方括号的链式索引,大概率返回的是原DataFrame的副本而非视图,你修改的只是副本,原数据根本没变化。
给你几个靠谱的解决方案,按简洁程度排序:
方法一:转整数再转回字符串(最省心)
这种方法利用整数自动去除前导零的特性,一步到位,还能完美处理全零的情况(比如'000'会变成'0'):
df_ZIPCOUNTY_CA['county code'] = df_ZIPCOUNTY_CA['county code'].astype(int).astype(str)
方法二:用字符串方法直接去前导零
如果不想转换数据类型,可以用str.lstrip()直接去掉开头的'0',记得补上全零变空字符串的处理:
# 去除前导零 df_ZIPCOUNTY_CA['county code'] = df_ZIPCOUNTY_CA['county code'].str.lstrip('0') # 把全零处理后产生的空字符串替换回'0' df_ZIPCOUNTY_CA['county code'] = df_ZIPCOUNTY_CA['county code'].replace('', '0')
方法三:用.loc精准修改指定行
要是你只想修改那些以'0'开头的行,用.loc可以彻底避免链式索引的坑,确保修改的是原DataFrame:
# 先筛选出需要修改的行 mask = df_ZIPCOUNTY_CA['county code'].str.startswith('0') # 用.loc安全赋值 df_ZIPCOUNTY_CA.loc[mask, 'county code'] = df_ZIPCOUNTY_CA.loc[mask, 'county code'].str.lstrip('0')
之前你的代码没生效,核心问题就是链式索引的写法——别再用df[条件][列名] = ...这种方式啦,Pandas官方也不推荐,很容易踩修改无效的坑。
内容的提问来源于stack exchange,提问作者paulnsn




