Pandas:在切片上调用应用时设置WithCopyWarning
Pandas: SettingWithCopyWarning when calling apply on a slice
我有一个包含几列的 Pandas DataFrame,但我想(有条件地)操作单个列中的所有值,如下所示:
df[my_column] = df[my_column].apply(lambda x: -float(x))
这有效,但是 Pandas 给了我一个 SettingWithCopyWarning。
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
我处理此列的方式有问题吗?
问题出现在您的代码中。 df 可能是另一个数据帧的一部分,pandas 警告您不要修改 df,因为它是另一个数据帧的副本。
当您想对数据框进行子集化并进一步操作时,最简单的解决方案是使用 .copy() 方法。
df = df_original.copy()
现在您可以应用如下代码:
df[my_column] = xxx
没有 SettingWithCopyWarning。
我有一个包含几列的 Pandas DataFrame,但我想(有条件地)操作单个列中的所有值,如下所示:
df[my_column] = df[my_column].apply(lambda x: -float(x))
这有效,但是 Pandas 给了我一个 SettingWithCopyWarning。
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
我处理此列的方式有问题吗?
问题出现在您的代码中。 df 可能是另一个数据帧的一部分,pandas 警告您不要修改 df,因为它是另一个数据帧的副本。
当您想对数据框进行子集化并进一步操作时,最简单的解决方案是使用 .copy() 方法。
df = df_original.copy()
现在您可以应用如下代码:
df[my_column] = xxx
没有 SettingWithCopyWarning。