DataFrame型は、2次元のデータを扱うためのオブジェクトで、各データにインデックス(index)とカラム(column)を付けることができます。1次元データを扱うSeries型については、以下の記事を参照してください。
目次
DataFrame型オブジェクトの生成
DataFrame関数に2次元データのリストを渡すことで、DataFrame型オブジェクトを生成することができます。2次元のデータなので、リスト内リストを関数に渡します。
例:DataFrame型オブジェクトを生成
import pandas as pd d = [[1,2,3], [4,5,6], [7,8,9]] df = pd.DataFrame(d) print(ds)
出力:
0 1 2 0 1 2 3 1 4 5 6 2 7 8 9
DataFrame型オブジェクトを生成することができました。今回はインデックスとカラムを指定していないため、自動的に整数値が割り振られています。
インデックスとカラムを設定するには、DataFrame関数の引数にリストを渡します。
例:インデックスとカラムを指定してDataFrame型オブジェクトを生成
import pandas as pd d = [[1,2,3], [4,5,6], [7,8,9]] i = ["index-1", "index-2", "index-3"] c = ["column-1", "column-2", "column-3"] df = pd.DataFrame( data=d, index=i, columns=c, ) print(df)
出力:
column-1 column-2 column-3 index-1 1 2 3 index-2 4 5 6 index-3 7 8 9
DataFrame関数は、データ、インデックス、カラムの順で渡せば以下の形でもOKです。
df = pd.DataFrame(d, i, c)
辞書のキーをカラム、バリューをデータとしてDataFrame型オブジェクトを生成することもできます。
例:辞書型からDataFrame型オブジェクトを生成
import pandas as pd d = {"column-1":[1,2,3], "column-2":[4,5,6], "column-3":[7,8,9]} df = pd.DataFrame(d) print(df)
出力:
column-1 column-2 column-3 0 1 4 7 1 2 5 8 2 3 6 9
データ、インデックス、カラムの取得
データはvalues属性、インデックスはindex属性、カラムはcolumns属性を用いて、DataFrame型から抽出することができます。
例:DataFrame型からデータ、インデックス、カラムを抽出
import pandas as pd d = [[1,2,3], [4,5,6], [7,8,9]] i = ["index-1", "index-2", "index-3"] c = ["column-1", "column-2", "column-3"] df = pd.DataFrame(d, i, c) print(df.values) print(df.index) print(df.columns)
出力:
[[1 2 3] [4 5 6] [7 8 9]] Index(['index-1', 'index-2', 'index-3'], dtype='object') Index(['column-1', 'column-2', 'column-3'], dtype='object')
行番号やインデックス名を用いて、特定の範囲の行だけを取得することが可能です。
df[開始行番号:終了行番号]
またはdf[開始インデックス名:終了インデックス名]
の形で範囲を指定します。
例:指定した範囲の行を取得
import pandas as pd d = [[1,2,3], [4,5,6], [7,8,9]] i = ["index-1", "index-2", "index-3"] c = ["column-1", "column-2", "column-3"] df = pd.DataFrame(d, i, c) print(df[0:2]) #数字で範囲を指定 print(df["index-1":"index-2"]) #インデックス名で範囲を指定
出力:
column-1 column-2 column-3 index-1 1 2 3 index-2 4 5 6 column-1 column-2 column-3 index-1 1 2 3 index-2 4 5 6
同様に、カラム名を指定して列のデータを取得することが可能です。
df.カラム名
またはdf[カラム名]
で指定します。
例:指定した列を取得
d = [[1,2,3], [4,5,6], [7,8,9]] i = ["index-1", "index-2", "index-3"] c = ["A", "B", "C"] df = pd.DataFrame(d, i, c) print(df.B) print(df["B"])
出力:
index-1 1 index-2 4 index-3 7 Name: column, dtype: int64 index-1 1 index-2 4 index-3 7 Name: column, dtype: int64
loc属性を用いて、指定した行・列のデータを取得することができます。
df.loc[インデックス名, カラム名]
という形で使用します。
例:loc属性で特定の行を取得
import pandas as pd d = [[1,2,3], [4,5,6], [7,8,9]] i = ["index-1", "index-2", "index-3"] c = ["column-1", "column-2", "column-3"] df = pd.DataFrame(d, i, c) print(df.loc["index-1"])
出力:
column-1 1 column-2 2 column-3 3 Name: index-1, dtype: int64
特定の行を抽出できました。
loc属性で特定の列を取得するには、インデックス名を:
にしてカラム名を指定します。
import pandas as pd d = [[1,2,3], [4,5,6], [7,8,9]] i = ["index-1", "index-2", "index-3"] c = ["column-1", "column-2", "column-3"] df = pd.DataFrame(d, i, c) print(df.loc[:, "column-2"])
出力:
index-1 1 index-2 4 index-3 7
特定の列を抽出できました。
iloc属性も、指定した行・列のデータを取得することができます。
loc属性ではインデックス名とカラム名で指定していましたが、iloc属性では~行目、~列目をゼロから始まる整数値で指定します。
例:iloc属性で特定の列を取得
import pandas as pd d = [[1,2,3], [4,5,6], [7,8,9]] i = ["index-1", "index-2", "index-3"] c = ["column-1", "column-2", "column-3"] df = pd.DataFrame(d, i, c) print(df.iloc[1])
出力:
column-1 4 column-2 5 column-3 6 Name: index-2, dtype: int6
条件を付けてデータを抽出
DataFrame型から、条件を指定して条件を満たすデータだけを抽出することができます。
df[条件文]
の様な形で抽出する条件を指定します。
例:column-1が4より大きい行を抽出
import pandas as pd d = [[1,2,3], [4,5,6], [7,8,9]] i = ["index-1", "index-2", "index-3"] c = ["column-1", "column-2", "column-3"] df = pd.DataFrame(d, i, c) print(df[df["column-1"] > 4])
出力:
column-1 column-2 column-3 index-3 7 8 9
例:column-1が4より大きい行を抽出(loc属性使用)
import pandas as pd d = [[1,2,3], [4,5,6], [7,8,9]] i = ["index-1", "index-2", "index-3"] c = ["column-1", "column-2", "column-3"] df = pd.DataFrame(d, i, c) print(df[df.loc[:, "column-1"]>4])
出力:
column-1 column-2 column-3 index-3 7 8 9