インデックスを使用してパンダデータフレームの特定のセルの値を設定する 質問する

インデックスを使用してパンダデータフレームの特定のセルの値を設定する 質問する

Pandas DataFrameを作成しました

df = DataFrame(index=['A','B','C'], columns=['x','y'])

ここで、特定のセル、たとえば行Cと列に値を割り当てたいと思いますx。つまり、次の変換を実行したいと思います。

     x    y             x    y
A  NaN  NaN        A  NaN  NaN
B  NaN  NaN   ⟶   B  NaN  NaN
C  NaN  NaN        C   10  NaN

このコードで:

df.xs('C')['x'] = 10

しかし、 の内容はdf変更されていません。データフレームには、やはり のみが含まれていますNaN。どうすれば、必要な結果が得られるでしょうか?

ベストアンサー1

RukTechの回答、、df.set_value('C', 'x', 10)は私が以下で提案したオプションよりもはるかに高速です。しかし、廃止予定

今後、推奨される方法は.iat/.at


df.xs('C')['x']=10動作しない理由:

df.xs('C')デフォルトでは新しいデータフレームを返しますコピー付きデータの

df.xs('C')['x']=10

この新しいデータフレームのみを変更します。

df['x']データフレームのビューを返すdfので、

df['x']['C'] = 10

自身を変更しますdf

警告: 操作がコピーを返すかビューを返すかを予測することが難しい場合があります。このため、ドキュメントでは「連鎖インデックス」による割り当てを避けることを推奨しています


そこで推奨される代替案は

df.at['C', 'x'] = 10

これはを変更しますdf


In [18]: %timeit df.set_value('C', 'x', 10)
100000 loops, best of 3: 2.9 µs per loop

In [20]: %timeit df['x']['C'] = 10
100000 loops, best of 3: 6.31 µs per loop

In [81]: %timeit df.at['C', 'x'] = 10
100000 loops, best of 3: 9.2 µs per loop

おすすめ記事