pandas 避免引发带有复制警告的设置

4urapxun  于 2023-02-07  发布在  其他
关注(0)|答案(3)|浏览(140)

假设我有一个包含a、B、c、d列的 Dataframe df,我想从a、b、d列中减去这些列的平均值,我该如何实现呢?
我试过df[['a','b','d']] = df[['a','b','d']] - df[['a','b','d']].mean(),但是我得到了SettingWithCopyWarning。我如何在没有警告的情况下达到同样的效果?

2guxujil

2guxujil1#

df'a','b','d '是原始 Dataframe 的类似视图...尝试在视图中设置值可能每次都有效,也可能每次都无效
分头做

df['a']=df['a'].mean()
df['b']=df['b'].mean()
df['d']=df['d'].mean()

它对性能没有太大影响

a7qyws3x

a7qyws3x2#

你确定你得到了那个语句/行的警告吗?
无论如何,在一个 Pandorable 的方式,并减少可见噪音,我会做:

cols = ["a", "b", "d"]

df[cols] = df[cols].sub(df[cols].mean())
2w2cym1i

2w2cym1i3#

当您尝试直接修改 Dataframe 的切片时,例如df'a','b','d ',如果您不小心,可能会导致意外行为。因此,出现此警告是为了谨慎地警告您,执行此复制过程会更改原始 Dataframe 。要隐藏此警告,您可以用途:

mean = df[['a','b','d']].mean()
df[['a','b','d']] = df[['a','b','d']] - mean

df.loc[:, ['a','b','d']] = df[['a','b','d']] - df[['a','b','d']].mean()

相关问题