パンダのSettingWithCopyWarningを理解しようとしています。私はデータフレームから列を選択し、この列の選択で作業したいと思います。不足している値を入力し、1より大きい値をすべて1に置き換える必要があります。pandas SettingWithCopy警告サブセットの列を使用する場合の警告
sub_df = df [['col1'、 'col2'、 'col3']]はコピーを生成し、が欲しいです。問題があるかどうか、それを避ける方法を教えてください。
私はこの文脈で連鎖割当てについてたくさん読んでいますが、私はここでこれをやっていますか?
data={'col1' : [25 , 0, 100, None],
'col2' : [50 , 0 , 0, None],
'col3' : [None, None, None, 100],
'col4' : [ 20 , 20 , 20 , 20 ],
'col5' : [1,1,2,3]}
df= pd.DataFrame(data)
sub_df=df[['col1', 'col2', 'col3']]
sub_df.fillna(0, inplace=True)
sub_df[df>1]=1 # produces the copy warning
sub_df
本当に私は以下のように列の私のサブセットのための新しい名前を使用していない場合は、この警告がトリガされていない理由を私は混乱:
data={'col1' : [25 , 0, 100, None],
'col2' : [50 , 0 , 0, None],
'col3' : [None, None, None, 100],
'col4' : [ 20 , 20 , 20 , 20 ],
'col5' : [1,1,2,3]}
df= pd.DataFrame(data)
df=df[['col1', 'col2', 'col3']]
df.fillna(0, inplace=True)
df[df>1]=1 # does not produce the copy warning
df
感謝を!最初にそれはそうが不明確ではない場合、あなたがdf
のサブセットでdf
を上書きする第二に、あなたはビューまたは元DFのコピー上で動作するかどうか曖昧だ
2つのコードスニペットは番目に、意味的に異なっています元のdfのサブセットを元のdfに上書きすることで、元のdfのコピーまたはビュー上で操作したいかどうかは最初は曖昧です。 – EdChum
ありがとうございます。私はコピーを作成したいですか?どのくらい私はそれをやるのだろうか? – Eva
それは、あなたの意図がコピーに作用することになっている場合、 'sub_df = df [['col1'、 'col2'、 'col3']] copy()'を実行することです。ビュー上で操作する場合は、colのリストを定義し、新しい['indexers'](http://pandas.pydata.org/pandas-docs/stable/indexing.html#different-choices- df.loc [df1、col_list] = 1' – EdChum