Python 可以在视图或切片上使用此方法来修改原始数据帧吗?
如果数据帧中的某些单元格值在一个组内,我想替换它们,但如果它们在另一个组内,则不想替换 例如,我创建了以下数据帧:Python 可以在视图或切片上使用此方法来修改原始数据帧吗?,python,pandas,dataframe,Python,Pandas,Dataframe,如果数据帧中的某些单元格值在一个组内,我想替换它们,但如果它们在另一个组内,则不想替换 例如,我创建了以下数据帧: 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 我想在第1列中筛选为“a”,然后仅在第2列中用9替换
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
我想在第1列中筛选为“a”,然后仅在第2列中用9替换任何2,用7替换任何3
df.loc[(df['1st']=='a')].replace({2:9, 3:7}, inplace = True)
df # same as original
这将尝试在切片的副本而不是视图上设置值,因此无法更新原始数据帧。也许这里正在进行一些链接索引。我希望dataframe的视图(仍然是dataframe类型)能够允许replace方法作用于视图,从而作用于原始视图
我发现唯一可行的方法是,对于要替换的每个列-值对,我需要使用一个命令:
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
有更好的方法吗
是否可以在数据帧视图上使用replace方法或其他方法来修改原始数据帧
我试图了解拷贝与视图,以及通过处理过滤结果来修改原始数据帧的最佳方式
谢谢你的帮助 尝试使用
更新
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
谢谢你,尤本!这在这种情况下确实有效。有趣的是,它将变量类型更改为float64,而另一个方法将其保留为int。另外,如果我要在完整数据帧上处理replace
,它不会更改数据类型。@PhasorLaser如果知道要更新的问题,可以执行astype(int)对于it@PhasorLaser我还添加了用于保留dtype的assign方法。我不知道如何将astype(int)用于此命令,但我看到了您的第二条注释。这也有助于有另一个选择。这是因为astype(int)在这种情况下不起作用吗?