ここで学習すること
行列を扱えるDataFrame型の作成方法、参照方法、編集方法を学習します。
DateFramaはSeriesを重ねたような2次元の行列データです。
DataFrameの作成方法
DataFrameの作成方法は以下の2つがあります。
pd.DataFrame([Series, Series, …])
import pandas as pd
data = {“pref”: [“hyogo”, “osaka”, “nara”, “kyoto”, “siga”], #dataという辞書型データ
“year”:[2000, 2004, 2006, 2012, 2015],
“hight”: [50, 100, 125, 150, 180]}
df = pd.DataFrame(data) #dataをpd.DataFrame()に渡す
print(df)
=>
pref year hight
hyogo 2000 50
osaka 2004 100
nara 2006 125
kyoto 2012 150
siga 2015 180
DataFrameのインデックスとカラム
DataFrameの行をインデックス、列をカラムと呼びます。
インデックスやカラムを指定せずにDataFrameを作成した場合、インデックスとカラムは0から始まる整数が割り当てられます。
インデックスとカラムの指定はdf.index 、df.columsに列数と同じ長さのリストを代入することで割り当てることができます。
インデックス(カラム)を追加する
import pandas as pd
data = {“pref”: [“hyogo”, “osaka”, “nara”, “kyoto”, “siga”],
“year”:[2000, 2004, 2006, 2012, 2015],
“hight”: [50, 100, 125, 150, 180]}
df = pd.DataFrame(data)
print(df)
=>
pref year hight
hyogo 2000 50
osaka 2004 100
nara 2006 125
kyoto 2012 150
このDataFrameに’出生地’, ‘幼稚園’,’小学校’, ‘中学’, ‘高校’のインデックスを追加します。df.indexにリスト型で代入します。
df.index = [‘出生地’, ‘幼稚園’,’小学校’, ‘中学’, ‘高校’]
=>
pref year hight
出生地 hyogo 2000 50
幼稚園 osaka 2004 100
小学校 nara 2006 125
中学 kyoto 2012 150
高校 siga 2015 180
DataFrameの行を追加する
DataFrameに行を追加する場合はappend()を用いてseriesを追加します。
import pandas as pd
data = {“pref”: [“hyogo”, “osaka”, “nara”, “kyoto”, “siga”],
“year”:[2000, 2004, 2006, 2012, 2015],
“hight”: [50, 100, 125, 150, 180]}
df = pd.DataFrame(data)
print(df)
=>
pref year hight
0 hyogo 2000 50
1 osaka 2004 100
2 nara 2006 125
3 kyoto 2012 150
4 siga 2015 180
#この行列に以下のSeries行列(行のみ)を追加します。
seriesの行列tsuikaを作成します。
tsuika = pd.Series([“tokyo”, 2018, 200],index=[“pref”,”year”,”hight”])
print(tsuika)
=>
pref tokyo
year 2018
hight 200
dtype: object
変数dfにtsuikaを追加します。
df = df.append(tsuika,ignore_index=True)
print(df)
=>
pref year hight
0 hyogo 2000 50
1 osaka 2004 100
2 nara 2006 125
3 kyoto 2012 150
4 siga 2015 180
5 tokyo 2018 200
DataFrameに列を追加する
df[“新しいカラム名”]にリストまたはSeriesを代入することで新しい列を追加できます。
import pandas as pd
data = {“pref”: [“hyogo”, “osaka”, “nara”, “kyoto”, “siga”],
“year”:[2000, 2004, 2006, 2012, 2015],
“hight”: [50, 100, 125, 150, 180]}
df = pd.DataFrame(data)
print(df)
=>
pref year hight
0 hyogo 2000 50
1 osaka 2004 100
2 nara 2006 125
3 kyoto 2012 150
4 siga 2015 180
この行列に[“幼稚園”,”小学校”,”中学”, “高校”,”大学”] の列を追加します。df[“新しいカラム名”]=[新しいリスト]で追加できます。
df[“level”]=[“幼稚園”,”小学校”,”中学”, “高校”,”大学”]
print(df)
=>
pref year hight level
0 hyogo 2000 50 幼稚園
1 osaka 2004 100 小学校
2 nara 2006 125 中学
3 kyoto 2012 150 高校
4 siga 2015 180 大学
DataFrameのデータの参照
DataFrameのデータをインデックスやカラムを指定して参照する場合、df.loc[“インデックスのリスト”, “カラムのリスト”]で参照できます。
import pandas as pd
data = {“pref”: [“hyogo”, “osaka”, “nara”, “kyoto”, “siga”],
“year”:[2000, 2004, 2006, 2012, 2015],
“hight”: [50, 100, 125, 150, 180]}
df = pd.DataFrame(data)
print(df)
=>
pref year hight
0 hyogo 2000 50
1 osaka 2004 100
2 nara 2006 125
3 kyoto 2012 150
4 siga 2015 180
df = df.loc[“インデックスのリスト”, “カラムのリスト”]でインデックス[1,2]、カラム[“year”]のデータを参照します。
df = df.loc[[1,2],[“year”]]
print(df)
=>
year
1 2004
2 2006
インデックスやカラムの番号で参照する場合はdf.iloc[[インデックス],[カラム]]で参照します。インデックス[1,2]、カラム[2]のデータを参照します。
df = df.iloc[[1,2],[2]]
print(df)
hight
1 100
2 125
DataFramaの行や列を削除する
DataFrameの行や列を削除する場合、df.drop()を用います。
import pandas as pd
data = {“pref”: [“hyogo”, “osaka”, “nara”, “kyoto”, “siga”],
“year”:[2000, 2004, 2006, 2012, 2015],
“hight”: [50, 100, 125, 150, 180]}
df = pd.DataFrame(data)
pritn(df)
=>
pref year hight
0 hyogo 2000 50
1 osaka 2004 100
2 nara 2006 125
3 kyoto 2012 150
4 siga 2015 180
行を削除する場合は.drop(削除する行)とします。↓では削除する行はrange関数で0行目を指定しています。
df1 = df.drop(range(0,1))
print(df1)
=>
pref year hight
1 osaka 2004 100
2 nara 2006 125
3 kyoto 2012 150
4 siga 2015 180
列を削除する場合は第2引数にaxis=1を指定します。
df2 = df.drop(“year”, axis=1)
print(df2)
pref hight
0 hyogo 50
1 osaka 100
2 nara 125
3 kyoto 150
4 siga 180
DataFrameのデータをソートする
DataFrameのデータを小さい順にソートするにはdf.sort_values(by=”カラムまたはカラムのリスト”, ascending=True)を用います。大きい順の場合はascending=Falseとします。
import pandas as pd
data = {“pref”: [“hyogo”, “osaka”, “nara”, “kyoto”, “siga”],
“year”:[2000, 2004, 2006, 2012, 2015],
“hight”: [50, 100, 125, 150, 180]}
df = pd.DataFrame(data)
print(df)
pref year hight
0 hyogo 2000 50
1 osaka 2004 100
2 nara 2006 125
3 kyoto 2012 150
4 siga 2015 180
df.sort_values(by=”カラム”, ascending=False)でカラムhightのデータが大きい順に並べ変えます。
df = df.sort_values(by=”hight”, ascending = False)
print(df)
=>
pref year hight
4 siga 2015 180
3 kyoto 2012 150
2 nara 2006 125
1 osaka 2004 100
0 hyogo 2000 50