在将Pandas从0.11升级到0.13.0rc1时,用户可能会遇到大量SettingWithCopyWarning消息。一个这样的例子是:
E:\FinReporter\FM_EXT.py:449: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_index,col_indexer] = value instead quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE
SettingWithCopyWarning 标记可能会混淆的“链接”分配,例如:
df[df['A'] > 2]['B'] = new_val # new_val not set in df
这并不总是有效预期的,特别是当第一个选择返回副本时。要解决此问题,请使用:
df.loc[df['A'] > 2, 'B'] = new_val
在提供的代码片段中:
quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE
您正在有效地执行链式赋值相当于:
quote_df = quote_df[quote_df['A'] > 2] quote_df['TVol'] = new_val
此模式无法与反例区分开来,并会触发警告。
如果您确信写入不会影响原始帧,请使用以下命令禁用警告:
import pandas as pd pd.options.mode.chained_assignment = None # default='warn'
要进一步了解,请参阅以下资源:
以上是如何有效处理Pandas的SettingWithCopyWarning?的详细内容。更多信息请关注PHP中文网其他相关文章!