Python Code Notes

Information by python engineer

pandas DataFrame型オブジェクトの基本 Python

f:id:vigilantPotato:20190618225252p:plain

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