pandas.DataFrame: inplace = True 和赋值同一个变量的区别?
pandas.DataFrame: difference between inplace = True and assigning the same variable?
我正在 pandas 数据框中用 np.nan
替换 -np.inf
和 np.inf
。
但是,使用 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
而只是将变量重新分配给自身(不确定这是否是一个聪明的想法),但这似乎 "solve" 问题:
df = df.replace([np.inf, -np.inf], np.nan)
我在另一个问题中读到 python 区分副本和视图,如果不清楚,修改一个变量也会影响另一个变量。
要不要使用inplace
?
就像背景一样:我有一个包含股票价格的数据框,但是缺少值。我有一个使用此数据框的函数,但 "cleans" 在处理之前先收集数据。
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
你需要copy
:
df_aux = df.dropna(axis = 1).copy()
如果您稍后修改 df_aux
中的值,您会发现修改不会传播回原始数据 df
,并且 Pandas 会发出警告。
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
我正在 pandas 数据框中用 np.nan
替换 -np.inf
和 np.inf
。
但是,使用 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
而只是将变量重新分配给自身(不确定这是否是一个聪明的想法),但这似乎 "solve" 问题:
df = df.replace([np.inf, -np.inf], np.nan)
我在另一个问题中读到 python 区分副本和视图,如果不清楚,修改一个变量也会影响另一个变量。
要不要使用inplace
?
就像背景一样:我有一个包含股票价格的数据框,但是缺少值。我有一个使用此数据框的函数,但 "cleans" 在处理之前先收集数据。
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
你需要copy
:
df_aux = df.dropna(axis = 1).copy()
如果您稍后修改 df_aux
中的值,您会发现修改不会传播回原始数据 df
,并且 Pandas 会发出警告。
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