首页 >后端开发 >Python教程 >为什么修改从子集派生的 DataFrame 时会出现'SettingWithCopyWarning”?

为什么修改从子集派生的 DataFrame 时会出现'SettingWithCopyWarning”?

Susan Sarandon
Susan Sarandon原创
2024-10-29 12:12:02667浏览

Why Does `SettingWithCopyWarning` Occur When Modifying DataFrames Derived from Subsets?

找到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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn