Pandas DataFrame列字符串替换为0时代码无效果如何调整参数?
问题解决方法
问题1:replace操作未生效的原因
pandas的replace方法默认不会修改原对象,只会返回修改后的新Series,你没有接收返回值也没有开启原地修改参数,所以原DataFrame没有发生变化。
问题2:当前正则无法匹配到要替换的内容
你当前的正则^$只能匹配空字符串,但你代码里生成的new列中非数字值对应的是提取到的a、b、sc/a等非空字符串,根本匹配不到,就算replace生效也达不到你的预期。
调整方案
如果你要实现「new列中只有纯数字值保留,其余全部替换为0」的预期,有两种可选方式:
方式1:修改你的replace参数
把正则改成匹配所有非数字的字符串,同时赋值回原列:
# 替换原来的replace行,匹配所有非纯数字的内容替换为0 df['new'] = df['new'].replace(to_replace=r'^\D+$', value=0, regex=True)
方式2:简化整体逻辑(更推荐)
不需要先提取前缀再替换,直接一步判断即可,代码更简洁不易出错:
import pandas as pd import numpy as np l2=['a. 12','b. 75','23', 'sc/a 34', '85', 'a 32', 'b 345'] df = pd.DataFrame({'col1': l2}) # 直接判断是否为纯数字,是就保留原值,否则设为0 df['new'] = np.where(df['col1'].str.isnumeric(), df['col1'], 0) print(df['new'])
执行后输出完全符合预期:
0 0 1 0 2 23 3 0 4 85 5 0 6 0 Name: new, dtype: object
内容的提问来源于stack exchange,提问作者john johns
相关产品推荐
相关产品推荐

