【问题标题】:pandas.DataFrame: difference between inplace = True and assigning the same variable?pandas.DataFrame:inplace = True 和分配相同变量之间的区别?
【发布时间】:2018-09-27 12:26:14
【问题描述】:

我在 pandas 数据框中将 -np.infnp.inf 替换为 np.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

【问题讨论】:

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


    【解决方案1】:

    你需要copy:

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

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

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        猜你喜欢
        • 2015-06-04
        • 1970-01-01
        • 2018-10-23
        • 2012-06-24
        • 2021-03-27
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        • 2012-03-23
        相关资源
        最近更新 更多