2017-11-03 18 views
0

の外を変更しない:私はDFにアクセスしたときパンダデータフレームの値は、私は私はこのようなパンダのデータフレームの値を変更ループの内部パンダのデータフレームを持っている機能

df[item].ix[(e1,e2)] = 1 

しかし、値がまだ変更されていません。あなたはどこが間違っているのかを知っていますか?

提案がありますか?

+2

'.ix'は使用しないでください。廃止予定です。しかし、私は問題が 'df [item]'がコピーを返すことであると思っています。それをコピーしてすぐに破棄してください。 'df.loc [item、(e1、e2)] = 1'を試してみてください。 –

+0

Elisha512、あなたの問題を解決した場合は、私の答えを受け入れるか、他に何ができるのか教えてください。ありがとう。 – MarredCheese

答えて

0

通常、問題を引き起こす連鎖インデックスを使用しています。コードでは、df[item]が系列を返し、次に.ix[(e1,e2)] = 1がその系列を変更し、元のデータフレームは変更されません。

import pandas as pd 

df = pd.DataFrame({'colA': [5, 6, 1, 2, 3], 
        'colB': ['a', 'b', 'c', 'd', 'e']}) 

print df 
df.ix[[1, 2], 'colA'] = 111 
print df 

コードは111行に1コーラの2を設定しますので、私はあなたがする探していたものの一種であると信じている:あなたはこのように、代わりに元のデータフレームを変更する必要があります。 1と2はもちろん変数に置き換えることができます。 https://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

サイドノート:

colA colB 
0  5 a 
1  6 b 
2  1 c 
3  2 d 
4  3 e 

    colA colB 
0  5 a 
1 111 b 
2 111 c 
3  2 d 
4  3 e 

が連鎖インデックスの詳細については、マニュアルを参照してくださいまた、あなたは、ループ内のデータフレームを変更するに述べたことから、一般的にあなたのコードを再考することをお勧めします。パンダを使用するときは、通常、代わりにセットベースの操作をループして活用することができます。これまで慣れていたものがありますが、ライブラリのフルパワーを解く方法です。

関連する問題