Pandas 0.13.0rc1 で導入された SettingWithCopyWarning は、DataFrame のスライスまたはコピーに値を設定するときに潜在的な問題についてユーザーに警告します。この警告は、混乱や予期しない動作を防ぐことを目的としています。
この警告は、データフレームのスライスまたはコピーに値が設定される「連鎖割り当て」によって発生します。例:
df[df['A'] > 2]['B'] = new_val # new_val not set in df
この例では、最初の選択 (df[df['A'] > 2]) はコピーを返し、このコピーに「B」を設定しようとすると、元のデータフレーム「df」は更新されません。 「df」を正しく更新するには、loc アクセサー:
df.loc[df['A'] > 2, 'B'] = new_val
変更を元の DataFrame に反映させる必要がないことが確実な場合は、警告を無効にすることができます:
import pandas as pd pd.options.mode.chained_assignment = None # default='warn'
スライスまたはコピーへの割り当てには、元の DataFrame を直接変更できる loc または iloc アクセサーを使用します。
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']
特定のケースでは、元の quote_df を変更する代わりに、必要な変更を加えて新しい DataFrame を再生成できます。
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])
以上がパンダのSettingWithCopyWarningを理解して処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。