pandas.DataFrame:inplace = True和赋值相同的变量之间的差异?

时间:2018-04-17 13:42:19

标签: python pandas function variable-assignment in-place

我在pandas数据框中用-np.inf替换np.infnp.nan

但是,使用inplace = True,我收到警告:

df.replace([np.inf, -np.inf], np.nan, inplace = True)

SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame

而只是将变量重新分配给自己(不确定这是否是一个聪明的想法),但似乎"解决"问题:

df = df.replace([np.inf, -np.inf], np.nan)

我已经读过另一个问题,即python区分副本和视图,如果不清楚,修改一个变量也会影响另一个变量。

应该限制使用inplace

就像背景:我有一个有股票价格的数据框,但是缺少价值。我有一个使用这个数据框的功能,但"清理"处理前的数据。

def func(df):
   df_aux = df.dropna(axis = 1)
   df_aux.replace([np.inf, -np.inf], np.nan, inplace = True)
   df_aux.fillna(method = 'ffill', inplace = True)

   some calculation with df_aux

   return x

2 个答案:

答案 0 :(得分:2)

您需要copy

df_aux = df.dropna(axis = 1).copy()

如果稍后修改df_aux中的值,您会发现修改不会传播回原始数据df,并且Pandas会发出警告。

答案 1 :(得分:0)

jezrael的答案只是在假设您要复制的前提下使警告沉默。

如果您想修改而不是复制,则使用inplace是有效的,但是您需要始终使用它来避免出现警告:

def func(df):
   df.dropna(axis = 1, inplace=True)
   df.replace([np.inf, -np.inf], np.nan, inplace=True)
   df.fillna(method = 'ffill', inplace=True)

   # some calculation with df

   return x