了解 Pandas 中的SettingWithCopyWarning
简介
升级到 Pandas 0.13.0rc1 后,您可能会遇到新的警告,设置WithCopyWarning。此警告旨在提醒您在修改 DataFrame 切片副本而不是原始 DataFrame 本身时存在潜在问题。
警告的原因
触发警告当值被分配给之前创建为副本的 DataFrame 的切片时。例如,考虑以下代码:
quote_df = pd.read_csv(StringIO(str_of_all), sep=',', names=list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg')) quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE
在此代码中,quote_df 变量最初创建为原始 DataFrame 的副本。为 quote_df 中的“TVol”列分配新值会触发SettingWithCopyWarning,因为更改不会传播回原始 DataFrame。
忽略警告的后果
忽略警告可能会导致意外行为和数据不一致
推荐方法
为了避免警告并确保正确的数据操作,您应该使用 .loc 访问器直接修改原始 DataFrame 中的值。以下代码使用 .loc 访问器重写上面的示例:
quote_df.loc[:, 'TVol'] = quote_df['TVol']/TVOL_SCALE
通过使用 .loc,您可以确保更改应用于原始 DataFrame 而不是副本。
禁用警告
如果您确信链式分配是有意的并且不会导致任何问题,您可以使用以下代码禁用SettingWithCopyWarning:
import pandas as pd pd.options.mode.chained_assignment = None # default='warn'
但是,通常建议解决导致警告的根本问题,而不是禁用它。
结论
SettingWithCopyWarning 提供了宝贵的反馈,可帮助您识别数据操作代码中的潜在错误。通过了解此警告的原因和后果,您可以确保代码按预期运行并避免任何数据完整性问题。
以上是如何避免 Pandas 设置WithCopyWarning?的详细内容。更多信息请关注PHP中文网其他相关文章!