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
如果您確定不需要將變更反映回原始DataFrame,則可以停用警告:
import pandas as pd pd.options.mode.chained_assignment = None # default='warn'
對於切片或副本的賦值,請使用loc 或iloc 存取器,它們允許直接修改原始DataFrame:
df.loc[df['A'] > 2, 'B'] = new_val df.iloc[2:5, 4] = [1, 8, 8]
如果您需要DataFrame 的新引用,請在修改之前使用DataFrame.copy() 建立副本:
new_df = df.copy() new_df['C'] = df['A'] + df['B']
在在您的具體情況下,您可以重新產生具有所需變更的新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中文網其他相關文章!