將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中文網其他相關文章!