如何正确替换pandas DataFrame指定列唯一值,解决现有替换代码不生效问题
错误原因
- pandas的
Series.replace()方法默认返回新的Series对象,不会直接修改原DataFrame中的数据,原有代码既没有将替换后的结果赋值回原列,也没有开启原地修改参数,因此修改没有生效。 - 你的需求是将整列统一替换为固定值,无需循环遍历唯一值,多余的循环还会降低代码执行效率。
最优实现方案
直接对目标列赋值即可,代码最简单且执行效率最高:
# s1的A1列所有值替换为1 s1['A1'] = 1 # s2的A1列所有值替换为2 s2['A1'] = 2
原逻辑的修正方案(仅作错误演示参考,不推荐使用)
如果你确实需要使用replace方法实现,可以通过两种方式修正原有代码:
- 开启
inplace=True参数开启原地修改
for i in s1['A1'].value_counts().index: s1['A1'].replace(i, 1, inplace=True) for i in s2['A1'].value_counts().index: s2['A1'].replace(i, 2, inplace=True)
- 将替换后的结果赋值回原列
for i in s1['A1'].value_counts().index: s1['A1'] = s1['A1'].replace(i, 1) for i in s2['A1'].value_counts().index: s2['A1'] = s2['A1'].replace(i, 2)
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

