找到SettingWithCopyWarning的罪魁祸首
尝试使用.loc[row_indexer, col_indexer] = value修改DataFrame时,“SettingWithCopyWarning”持续存在。此问题源于从另一个 DataFrame 访问 DataFrame 切片而不调用 .copy() 方法。
逐步错误重现
考虑以下代码:
import pandas as pd d = {'col1': [1, 2, 3, 4], 'col2': [3, 4, 5, 6]} df = pd.DataFrame(data=d) df['new_column'] = None df.loc[0, 'new_column'] = 100
最初,没有警告。但是,基于 df:
new_df = df.loc[df.col1 > 2]
的子集创建新 DataFrame,然后尝试使用 .loc:
new_df.loc[2, 'new_column'] = 100
修改新 DataFrame 会触发警告。
解决方案:对从子集派生的数据帧使用 .copy()
要解决此问题,请在基于子集创建新的 DataFrame 时始终使用 .copy() 方法现有 DataFrame 的子集。
new_df_copy = df.loc[df.col1 > 2].copy() new_df_copy.loc[2, 'new_column'] = 100
通过调用 .copy(),您可以创建子集的独立副本,避免修改值时出现警告。
以上是为什么修改从子集派生的 DataFrame 时会出现'SettingWithCopyWarning”?的详细内容。更多信息请关注PHP中文网其他相关文章!