首页 > 解决方案 > 可以在视图或切片上使用 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

有一个更好的方法吗?

可以在数据框的视图上使用替换方法或其他方法来修改原始数据吗?

我试图了解副本与视图以及通过处理过滤结果来修改原始数据框的最佳方法。

谢谢你的帮助!

标签: pythonpandasdataframe

解决方案


尝试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

推荐阅读