DataFrameオブジェクトの作成方法を説明します。
まずは、慣例に従って以下のようにpandas モジュールをimportしておきます。
import pandas as pd
DataFrameの作成にはpd.DataFrameクラスのイニシャライザ__init__()を用います。イニシャライザに渡すデータとして、リストで指定する場合と辞書で指定する場合があり、それぞれについて解説していきます。
[toc]サンプルデータ
サンプルデータとして以下のデータを用います。
以下のようにURLを指定して、DataFrameとして取得できます。
df = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')
リストからDataFrameを作成
まずは、イニシャライザ__init__()の引数(data)にリストを指定する方法を見ていきましょう。
df11 = pd.DataFrame(['a', 'b', 'c'])
print(df11)
0 0 a 1 b 2 c
df12 = pd.DataFrame([['a', 'b', 'c']])
print(df12)
0 1 2 0 a b c
なお、index, columns引数に何も指定しない場合は、デフォルトで0, 1, 2, … の数値の列ラベル、行インデックスが割り振られます。
また、dataとして指定するリストの行と列は以下のように、外側の要素から第1軸(=縦軸 / サンプル軸)・第2軸(=横軸)として解釈されます。
以下のようにすることで、2次元のデータをリストで作成することができます。
df13 = pd.DataFrame([['1-1', '1-2', '1-3'],
['2-1', '2-2', '2-3'],
['3-1', '3-2', '3-3']])
print(df13)
0 1 2 0 1-1 1-2 1-3 1 2-1 2-2 2-3 2 3-1 3-2 3-3
列ラベル・行インデックスを指定する場合は次のようにします。
df14 = pd.DataFrame([['1-1', '1-2', '1-3'],
['2-1', '2-2', '2-3'],
['3-1', '3-2', '3-3']],
index=['行1', '行2', '行3'], columns=['列1', '列2', '列3'])
print(df14)
列1 列2 列3 行1 1-1 1-2 1-3 行2 2-1 2-2 2-3 行3 3-1 3-2 3-3
サンプルデータは以下のようにDataFrameに格納できます。
df15 = pd.DataFrame([['田中一郎', '男', 50, '会社員'],
['佐藤花子', '女', 45, '弁護士'],
['高橋太郎', '男', 30, '医師'],
['橋本清', '男', 41, '自営業']],
columns=['名前', '性別', '年齢', '職業'])
辞書からDataFrameを作成
続いて、イニシャライザ__init__()の引数(data)にデータの項目名(列ラベル)をキー、その項目の要素リストを値とした辞書を指定する場合を説明します。
サンプルデータは以下のようにDataFrameに格納することができます。
df21 = pd.DataFrame({'名前' : ['田中一郎', '佐藤花子', '高橋太郎', '橋本清'],
'性別' : ['男', '女', '男', '男'],
'年齢' : [50, 45, 30, 41],
'職業' : ['会社員', '弁護士', '医師', '自営業']})
なお、この辞書の値として指定する要素にはSeriesも指定可能で、その場合はSeriesの行インデックスが作成するDataFrameの行インデックスとして設定されます。
numpy.ndarrayからDataFrameを作成
DataFrameは2次元のnumpy.ndarrayからも変換することができます。この場合はndarrayの第1軸・第2軸がそのままDataFrameの縦軸・横軸となります。
import pandas as pd
import numpy as np
array = np.array([[11, 12, 13],
[21, 22, 23],
[31, 32, 33]])
df31 = pd.DataFrame(array)
print(df31)
0 1 2 0 11 12 13 1 21 22 23 2 31 32 33
なお、ndarrayは異なるデータ型を保持することはできないので、要素に複数のデータ型がある場合はndarrayは使えません。
(すでにあるndarrayをDataFrameに変換する場合以外は、この方法はあまり使うメリットがないです。)
コメント