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

Susan Sarandon
发布: 2024-10-29 12:12:02
原创
592 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!