gpt4 book ai didi

python - SettingWithCopyWarning 使用 Pandas apply

转载 作者:行者123 更新时间:2023-12-04 16:42:23 31 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to deal with SettingWithCopyWarning in Pandas

(16 个回答)


11 个月前关闭。




试图弄清楚为什么下面的函数会返回可怕的 SettingWithCopyWarning ...
这是我打算修改数据帧的函数 df引用。

def remove_outliers_by_group(df, cols):
"""
Removes outliers based on median and median deviation computed using cols
:param df: The dataframe reference
:param cols: The columns to compute the median and median dev of
:return:
"""
flattened = df[cols].as_matrix().reshape(-1, )
median = np.nanmedian(flattened)
median_dev = np.nanmedian(np.abs(flattened) - median)
for col in cols:
df[col] = df[col].apply(lambda x: np.nan if get_absolute_median_z_score(x, median, median_dev) >= 2 else x)

违规行是 df[col] = df[col].apply(lambda x: np.nan if get_absolute_median_z_score(x, median, median_dev) >= 2 else x)根据这个错误:

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

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy df[col] = df[col].apply(lambda x: np.nan if get_absolute_median_z_score(x, median, median_dev) >= 2 else x)



我不明白的是我到处都看到这种模式,使用类似 df['a'] = df['a'].apply(lambda x: ...) 的东西。 ,所以我无法想象他们所有人都做错了。

我做错了吗?做这个的最好方式是什么?我想修改原始数据框。

谢谢你的帮助。

最佳答案

确保 df 是否是另一个数据框的副本。在这种情况下,您应该像这样编写代码

df = df_test.copy()

这确保 df 是副本而不是 View 。

从以下链接了解有关此警告的更多信息

https://www.youtube.com/watch?v=4R4WsDJ-KVc

关于python - SettingWithCopyWarning 使用 Pandas apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45615922/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com