提问人:Nicola Lepetit 提问时间:10/6/2022 更新时间:10/6/2022 访问量:220
使用函数时避免 SettingWithCopyWarning
avoid SettingWithCopyWarning when using a function
问:
我有 DataFrame,我需要根据现有列的值派生一个新列。
class SomeClass:
def reduce(self, x):
if x < 1:
return x ** 2
return np.sqrt(x)
def penalize_performance(self, df):
df['sqrt'] = df.apply(lambda x : self.reduce(x.perf), axis=1)
return df
结果是正确的,但我收到 SettingWithCopyWarning 警告:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
如何修复语法,以避免该问题?
答:
1赞
Echo
10/6/2022
#1
我发现避免的最好方法(这基本上是警告您检查结果,因为方法链接可能无法按预期工作,这意味着它只能更新您的 DataFrame“原始 DatFrame 副本”的子集,而不是您的原始 DataFrame)SettingWithCopyWarning
是使用.loc[]
class SomeClass:
def reduce(self, x):
if x < 1:
return x ** 2
return np.sqrt(x)
def penalize_performance(self, df):
df.loc[:, 'sqrt'] = df.apply(lambda x : self.reduce(x.perf), axis=1) #Edited line using .loc[] to update a dataframe.
return df
评论