pandas.DataFrame はラベル付き 2 次元配列
Python の Pandas ライブラリが提供する pandas.DataFrame
型は、テーブル形状のデータを表す 2 次元データ型で、Pandas によるデータ解析の要となるデータ形式です。
内部では NumPy ライブラリの ndarray
が利用されていますが、pandas.DataFrame
を使うと、X 軸(列)、Y 軸(行)の各インデックスに任意のラベルを付けることができます (1 次元データを表現する pandas.Series 型も用意されています)。
NumPy の ndarray
は同じデータタイプの値しか持てませんが、pandas.DataFrame
であれば、列ごとに異なるデータタイプの値を保持することができます。
pandas.DataFrame を生成する
pandas.DataFrame
コンストラクタで、次のように初期値となる 2 次元データだけを渡すと、行と列のラベルとして、0、1、2 という連番が割り振られます。
pandas.DataFrame
オブジェクトを print
関数に渡すと、見やすい形で出力してくれます。
import pandas as pd
data = [[100, 200, 300], [400, 500, 600], [700, 800, 900]]
df = pd.DataFrame(data)
print(df)
0 1 2
0 100 200 300
1 400 500 600
2 700 800 900
各インデックスにラベルを設定する
pandas.DataFrame
コンストラクタの columns
パラメータを使うと、X 軸(列)の各インデックスのラベルを設定することができます。
同様に、index
パラメータを使うと、Y 軸(行)の各インデックスのラベルを設定することができます。
import pandas as pd
data = [[100, 200, 300], [400, 500, 600], [700, 800, 900]]
columns = ('x1', 'x2', 'x3')
index = ('y1', 'y2', 'y3')
df = pd.DataFrame(data, columns=columns, index=index)
print(df)
x1 x2 x3
y1 100 200 300
y2 400 500 600
y3 700 800 900
ディクショナリから DataFrame を生成する
Python のディクショナリオブジェクトを pandas.DataFrame
に変換することができます。
pandas.DataFrame
コンストラクタにディクショナリを渡すと、そのキーがカラム名として使用されます。
import numpy as np
import pandas as pd
data = {
'A': 1.0,
'B': [100, 200, 300],
'C': np.array(['a', 'b', 'c']),
'D': pd.Series([0.1, 0.2, 0.3]),
'E': pd.Categorical(['apple', 'lemon', 'peach']),
'F': pd.date_range('2017-01-01', periods=3)
}
df = pd.DataFrame(data)
print(df)
A B C D E F
0 1.0 100 a 0.1 apple 2017-01-01
1 1.0 200 b 0.2 lemon 2017-01-02
2 1.0 300 c 0.3 peach 2017-01-03
この例では、キーがたまたまディクショナリの初期化時と同じ順番で並んでいますが、ディクショナリの要素には順序性はないので、このような順番でカラムが並ぶことは保証されていないことに注意してください(カラム名とそれに関連付けられた Series
データがあるだけです)。
ランダム値や連番からなる DataFrame を生成する
NumPy 配列から pandas.DataFrame
を生成することもできます。
NumPy ライブラリには、いろいろな形の NumPy 配列を生成するユーティリティ関数が用意されているので、これを利用してテスト用の pandas.DataFrame
を簡単に生成できます。
ランダムな DataFrame
import numpy as np
import pandas as pd
np.random.seed(2525) # 乱数シードを設定
arr = np.random.randint(0, 1000, size=(2, 3))
df = pd.DataFrame(arr, columns=("x1", "x2", "x3"))
print(df)
x1 x2 x3
0 636 952 324
1 21 289 966
ランダムな値を使うときは、上記のようにシード値を設定しておくことで、同じデータを再現できるようになります。
連番の DataFrame
arr = np.arange(10).reshape((2, 5))
df = pd.DataFrame(arr, columns=("A", "B", "C", "D", "E"))
print(df)
A B C D E
0 0 1 2 3 4
1 5 6 7 8 9