[Pandas] DataFrame 覚え書き

Python
  • 2023/02/11

業務でPandasのDataFrameを扱うことがあるのですが、どのようにアクセスすればいいのかよく忘れてしまいます。
そこでこの記事では、DataFrameの行/列や要素へのアクセス方法についてまとめます。

使うデータ

下記のデータをdata.csvとして、これをPandasで読み込んで使っていくことにします。

time,value
1,4.84163368
2,15.38505919
3,42.35096536
4,22.83927361
5,62.6732269
6,31.89646478
7,16.74838902
8,80.20569496
9,99.35598419
10,60.82346391
11,6.45335282
12,33.56849724
13,33.5150531
14,34.72228938
15,5.00173312
16,71.27694761
17,22.23884446
18,93.11127548
19,27.25996025
20,14.16525846
21,23.76336451
22,21.4812403
23,13.69519197
24,18.82479346
import pandas as pd

file_name = 'data.csv'
df = pd.read_csv(file_name)

データ全体を読み出す

データ全体を読む場合は、dfをそのまま出力します。

print('***df***')
print(df)

結果

***df***
    time      value
0      1   4.841634
1      2  15.385059
2      3  42.350965
3      4  22.839274
4      5  62.673227
5      6  31.896465
6      7  16.748389
7      8  80.205695
8      9  99.355984
9     10  60.823464
10    11   6.453353
11    12  33.568497
12    13  33.515053
13    14  34.722289
14    15   5.001733
15    16  71.276948
16    17  22.238844
17    18  93.111275
18    19  27.259960
19    20  14.165258
20    21  23.763365
21    22  21.481240
22    23  13.695192
23    24  18.824793

行を取り出す

行を取り出す場合は、取り出したい行番号の範囲を指定して取り出します。

print('***df[2:4]***')
print(df[2:4])

結果

***df[2:4]***
   time      value
2     3  42.350965
3     4  22.839274

なお、範囲指定ではなく一行だけを取り出そうとするとエラーになります。
一行のみの場合でも範囲指定をする必要があります。

print(df[1]) # これはエラーになる
print(df[1:2]) # 一行だけ取り出す場合も範囲指定する形式で記述する

列名を取り出す

列名を取り出す場合は、df.columnsにアクセスします。
列のインデックスを指定して、一つだけ取り出すことも可能です。

print('***df.columns***')
print(df.columns)
print('***df.columns[1]***')
print(df.columns[1])

結果

***df.columns***
Index(['time', 'value'], dtype='object')
***df.columns[1]***
value

列を取り出す

列を取り出す場合は、dfに列名を指定します。

print('***df["value"]***')
print(df["value"])

結果

***df["value"]***
0      4.841634
1     15.385059
2     42.350965
3     22.839274
4     62.673227
5     31.896465
6     16.748389
7     80.205695
8     99.355984
9     60.823464
10     6.453353
11    33.568497
12    33.515053
13    34.722289
14     5.001733
15    71.276948
16    22.238844
17    93.111275
18    27.259960
19    14.165258
20    23.763365
21    21.481240
22    13.695192
23    18.824793
Name: value, dtype: float64

先ほど列名を取り出した時のように、columnsのインデックスを指定しても同じ結果が得られます。

# df["value"] と同じ結果が得られる
print(df[df.columns[1]])

locを使って行を取り出す

行を取り出すにはlocを使う方法もあります。

print('***df.loc[2]***')
print(df.loc[2])

結果

***df.loc[2]***
time      3.000000
value    42.350965
Name: 2, dtype: float64

特定の位置の値を取り出す

列、行の順に名前を指定して特定の位置の値を取り出すことができます。

print('***df[df.columns[1]][0]***')
print(df[df.columns[1]][0])

結果

***df[df.columns[1]][0]***
4.84163368

まとめ

以上、私が業務で使用するメソッドの一覧でした。
慣れないうちは何度も読み返すことになりそうですが、見なくても使えるように体にしみこませていきたいと思います。

Profile

Hotaru

メーカーで組み込み系のソフトウェアやファームウェアの開発をしています。

仕事では主にC言語、Python、C#を使っています。 ...もっと見る