首页 > 后端开发 > Python教程 > 如何理解和处理Pandas的SettingWithCopyWarning?

如何理解和处理Pandas的SettingWithCopyWarning?

Barbara Streisand
发布: 2024-12-26 19:26:14
原创
153 人浏览过

How to Understand and Handle Pandas' SettingWithCopyWarning?

SettingWithCopyWarning:Pandas 中的解释和处理

Pandas 0.13.0rc1 中引入的SettingWithCopyWarning 会提醒用户在 DataFrame 的切片或副本上设置值时存在潜在问题。此警告旨在防止混淆和意外行为。

理解警告

该警告是由于“链式分配”而产生的,其中在 DataFrame 的切片或副本上设置值,例如as:

df[df['A'] > 2]['B'] = new_val  # new_val not set in df
登录后复制

在此示例中,第一个选择 (df[df['A'] > 2]) 返回一个副本,并尝试在此副本上设置“B”不会更新原始 DataFrame“df”。要正确更新“df”,请使用 loc 访问器:

df.loc[df['A'] > 2, 'B'] = new_val
登录后复制

处理警告

1。忽略警告

如果您确定不需要将更改反映回原始 DataFrame,则可以禁用警告:

import pandas as pd
pd.options.mode.chained_assignment = None  # default='warn'
登录后复制

2.使用 loc 和 iloc

对于切片或副本的赋值,请使用 loc 或 iloc 访问器,它们允许直接修改原始 DataFrame:

df.loc[df['A'] > 2, 'B'] = new_val
df.iloc[2:5, 4] = [1, 8, 8]
登录后复制

3。创建副本

如果您需要 DataFrame 的新引用,请在修改之前使用 DataFrame.copy() 创建副本:

new_df = df.copy()
new_df['C'] = df['A'] + df['B']
登录后复制

4.重新生成 DataFrame

在您的具体情况下,您可以重新生成具有所需更改的新 DataFrame,而不是修改原始 quote_df:

quote_df = pd.read_csv(StringIO(str_of_all), sep=',', names=list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'))
quote_df.rename(columns={'A':'STK', 'B':'TOpen', ...}, inplace=True)
quote_df['TVol'] = quote_df['TVol'] / TVOL_SCALE
quote_df['TAmt'] = quote_df['TAmt'] / TAMT_SCALE
quote_df['TDate'] = quote_df.TDate.map(lambda x: x[0:4]+x[5:7]+x[8:10])
登录后复制

以上是如何理解和处理Pandas的SettingWithCopyWarning?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板