読者です 読者をやめる 読者になる 読者になる

<Python, pandas> データフレーム上の [ ] による行、列の選択

Python pandas

データフレームDataFrame[]を使って、
row/indexか列columnを選択gettingする方法。
ちょっとはまったので、メモ。

まずは、データフレーム作成。

In [511]: df = pd.DataFrame(data=np.random.randn(5,5))

In [512]: df
Out[512]:
          0         1         2         3         4
0  0.007971 -0.615854 -0.136663 -0.531834  0.303792
1  0.129563  0.707930  0.679199  0.903427  0.857635
2  1.766439  1.291801  0.149056 -0.365731  1.086456
3  1.283418 -0.376622 -0.447210  0.012220 -0.358600
4  1.276012  1.135752 -0.512724  0.450186 -0.462273

列を選択+値を一括書き換え。

In [513]: df[0]=0

In [514]: df
Out[514]:
   0         1         2         3         4
0  0 -0.615854 -0.136663 -0.531834  0.303792
1  0  0.707930  0.679199  0.903427  0.857635
2  0  1.291801  0.149056 -0.365731  1.086456
3  0 -0.376622 -0.447210  0.012220 -0.358600
4  0  1.135752 -0.512724  0.450186 -0.462273

今度は、行の選択。スライス。
ここがはまりどころ! [hoge:hoge]は行のスライスとなる!

In [515]: df[0:2]=2

In [516]: df
Out[516]:
   0         1         2         3         4
0  2  2.000000  2.000000  2.000000  2.000000
1  2  2.000000  2.000000  2.000000  2.000000
2  0  1.291801  0.149056 -0.365731  1.086456
3  0 -0.376622 -0.447210  0.012220 -0.358600
4  0  1.135752 -0.512724  0.450186 -0.462273

じゃー列は???は、[[hoge,hoge]]となる。 スライスじゃなくて、column名の選択。

In [517]: df[[1,2]]=2

In [518]: df
Out[518]:
   0  1  2         3         4
0  2  2  2  2.000000  2.000000
1  2  2  2  2.000000  2.000000
2  0  2  2 -0.365731  1.086456
3  0  2  2  0.012220 -0.358600
4  0  2  2  0.450186 -0.462273

ここにこっそり書いてあった。 はまるなー。。。
10 Minutes to pandas — pandas 0.16.2 documentation