18

pandas行と列のインデックスのリストで検索する機能を提供します。

In [49]: index = ['a', 'b', 'c', 'd']

In [50]: columns = ['one', 'two', 'three', 'four']

In [51]: M = pandas.DataFrame(np.random.randn(4,4), index=index, columns=columns)

In [52]: M
Out[52]: 
        one       two     three      four
a -0.785841 -0.538572  0.376594  1.316647
b  0.530288 -0.975547  1.063946 -1.049940
c -0.794447 -0.886721  1.794326 -0.714834
d -0.158371  0.069357 -1.003039 -0.807431

In [53]: M.lookup(index, columns) # diagonal entries
Out[53]: array([-0.78584142, -0.97554698,  1.79432641, -0.8074308 ])

Mこれと同じインデックス作成方法を使用して、の要素を設定したいと思います。これどうやってするの?

4

2 に答える 2

23

この回答が書かれてから数年が経過したので、少し貢献するかもしれません。パンダのリファクタリングで、場所に値を設定しようとしています

M.iloc[index][col]

スライスに値を設定しようとすると、警告が表示される場合があります。

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

0.21 以降の pandas バージョンでは、正しい「pythonic」の方法はpandas.DataFrame.at オペレーターになりました。

次のようになります。

M.at[index,col] = new_value

古いバージョンの回答: 古いバージョンでこれを行うより「pythonic」な方法は、pandas.DataFrame.set_value命令を使用することです。この命令は、結果の DataFrame を返すことに注意してください。

M.set_value(index,column,new_value)

.iloc または .ix アプローチによって生成される可能性のある警告の原因を突き止めた後、これをここに投稿すると思いました。

set_value アプローチは、インデックスの複数のレベルをタプルとして配置することにより、マルチインデックス データフレームでも機能します (たとえば、列を (col,subcol) に置き換えます)。

于 2015-01-28T21:30:29.080 に答える
18

私があなたをフォローしているかどうかはわかりませんが、DataFrame.ix個々の要素を選択/設定するために使用していますか?

In [79]: M
Out[79]: 
        one       two     three      four
a -0.277981  1.500188 -0.876751 -0.389292
b -0.705835  0.108890 -1.502786 -0.302773
c  0.880042 -0.056620 -0.550164 -0.409458
d  0.704202  0.619031  0.274018 -1.755726

In [75]: M.ix[0]
Out[75]: 
one     -0.277981
two      1.500188
three   -0.876751
four    -0.389292
Name: a

In [78]: M.ix[0,0]
Out[78]: -0.27798082190723405

In [81]: M.ix[0,0] = 1.0

In [82]: M
Out[82]: 
        one       two     three      four
a  1.000000  1.500188 -0.876751 -0.389292
b -0.705835  0.108890 -1.502786 -0.302773
c  0.880042 -0.056620 -0.550164 -0.409458
d  0.704202  0.619031  0.274018 -1.755726

In [84]: M.ix[(0,1),(0,1)] = 1

In [85]: M
Out[85]: 
        one       two     three      four
a  1.000000  1.000000 -0.876751 -0.389292
b  1.000000  1.000000 -1.502786 -0.302773
c  0.880042 -0.056620 -0.550164 -0.409458
d  0.704202  0.619031  0.274018 -1.755726

インデックスでスライスすることもできます:

In [98]: M.ix["a":"c","one"] = 2.0

In [99]: M
Out[99]: 
        one       two     three      four
a  2.000000  1.000000 -0.876751 -0.389292
b  2.000000  1.000000 -1.502786 -0.302773
c  2.000000 -0.056620 -0.550164 -0.409458
d  0.704202  0.619031  0.274018 -1.755726
于 2012-08-23T21:54:44.830 に答える