如何在Pandas含文本值的字符串列中移除'.0'后缀?
解决Pandas字符串列移除
.0后缀的问题 原始数据
| Store Number | Count |
|---|---|
| 1.0 | 121 |
| 2.0 | 85 |
| 3.0 | 32 |
| ABC | 89 |
| BCD | 94 |
| CDE | 4 |
目标效果
| Store Number | Count |
|---|---|
| 1 | 121 |
| 2 | 85 |
| 3 | 32 |
| ABC | 89 |
| BCD | 94 |
| CDE | 4 |
试过的无效代码
df = df['Store Number'].replace('.0','')df = df['Store Number'].replace('.\d0','')
问题原因
- 第一种写法是普通字符串替换,会替换所有位置的
.0子串,且赋值逻辑错误——应该直接修改原DataFrame的列,而非把单列赋值给整个df。 - 第二种写法的正则表达式存在两处问题:
\d在字符串中需转义为\\d,且未添加regex=True参数,Pandas默认是全字符串匹配,导致正则规则不生效。
正确解决方法
方法一:正则精准替换(推荐)
利用str.replace配合正则,只匹配并替换字符串结尾的.0:
df['Store Number'] = df['Store Number'].str.replace(r'\.0$', '', regex=True)
r'\.0$':\.匹配点号(避免被当作通配符),0匹配数字0,$限定仅匹配字符串结尾的.0,不会干扰其他内容。regex=True:明确开启正则匹配模式。
方法二:类型转换法
如果所有带.0的字符串都是整数形式,可通过类型转换实现清理,同时保留非数值字符串:
def clean_store(s): try: return str(int(float(s))) except ValueError: return s df['Store Number'] = df['Store Number'].apply(clean_store)
该方法兼容性更强,哪怕遇到'123.0'这类长数字也能处理,非数值内容会原样保留。
内容的提问来源于stack exchange,提问作者Nicole Ardizzi
相关产品推荐
相关产品推荐

