python - 可以在视图或切片上使用 pandas 替换方法来修改原始数据框吗?
问题描述
如果它们在一个组中,我想替换数据框中的某些单元格值,但如果它们是其他组则不替换。
例如,我创建以下数据框:
import pandas as pd
df = pd.DataFrame([['a',2,3],['b',2,3],['a',3,3]], columns = ['1st', '2nd', '3rd'])
df
1st 2nd 3rd
0 a 2 2
1 b 2 3
2 a 3 3
我想在第一列过滤到“a”,然后只在第二列用 9s 和 3s 替换任何 2s 和 7s。
df.loc[(df['1st']=='a')].replace({2:9, 3:7}, inplace = True)
df # same as original
这会尝试在切片的副本而不是视图上设置值,因此无法更新原始数据帧。也许这里有一些链式索引。我希望数据框的视图(仍然是数据框类型)允许替换方法作用于视图,从而作用于原始数据。
我发现唯一可行的方法是,我要为每个要替换的列值对使用一个命令:
df.loc[(df['1st']=='a') & (df['2nd']==2), '2nd'] = 9
df.loc[(df['1st']=='a') & (df['2nd']==3), '2nd'] = 7
df # It worked
1st 2nd 3rd
0 a 9 2
1 b 2 3
2 a 7 3
有一个更好的方法吗?
可以在数据框的视图上使用替换方法或其他方法来修改原始数据吗?
我试图了解副本与视图以及通过处理过滤结果来修改原始数据框的最佳方法。
谢谢你的帮助!
解决方案
尝试update
df.update(df.loc[(df['1st']=='a')].replace({2:9, 3:7}))
df
1st 2nd 3rd
0 a 9.0 7.0
1 b 2.0 3.0
2 a 7.0 7.0
如果不想改变类型
df.loc[(df['1st']=='a')]=df.loc[(df['1st']=='a')].replace({2:9, 3:7})
df
1st 2nd 3rd
0 a 9 7
1 b 2 3
2 a 7 7
推荐阅读
- python-2.7 - 如何在 Python 2.7 Django-admin 的项目过程中计算每天小时数变化的小时数
- r - 如何检查适合数据集的二次方程?
- python - 如何解决此 pivot_table 错误?
- javascript - 反应服务器端渲染指向错误的 bundle.js
- python - Python Click:多个键值对参数
- python - gTTS 直接输出
- java - 出现错误无法加载 AppCompat ActionBar,出现未知错误。在 Android Studio 中
- javascript - 未捕获(承诺)类型错误:无法读取未定义的属性“电子邮件”
- python - 如何约束 TensorFlow 中的权重不改变符号?
- python - 更改 x-ticks matplotlib 时出现值错误