pandasの基本トピック
pandasの概要
pandas
はデータ分析やデータの操作に用いることのできるPython
から用いることのできるオープンソースのライブラリです。統計解析に用いられるR
と似たような機能を用いることができます。
pandasのインストールと動作確認
$ pip install pandas
pandas
は上記を実行することでPyPIから入手することができます。
pandas
の動作確認にあたっては下記などを実行すると良いです。
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3]})
df2 = pd.DataFrame({'A1': [1, 2, 3], 'A2': [1, 2, 3]})
print(d1)
print(d2)
・実行結果
A
0 1
1 2
2 3
A1 A2
0 1 1
1 2 2
2 3 3
実務でよく用いるpandasの機能
csvファイルの保存・読み込み
import pandas as pd
df = pd.DataFrame({'A1': [0.1, 0.2, 0.3], 'A2': [1, 2, 3]})
df.to_csv("sample1.csv")
上記を実行すると、下記のようなcsvファイルがカレントディレクトリに生成されます。
,A1,A2
0,0.1,1
1,0.2,2
2,0.3,3
上記の一番左のインデックスを省略したい場合は下記のようにindex
にFalse
を指定すれば良いです。
import pandas as pd
df = pd.DataFrame({'A1': [0.1, 0.2, 0.3], 'A2': [1, 2, 3]})
df.to_csv("sample2.csv", index=False)
上記を実行すると下記のようなcsvファイルがカレントディレクトリに生成されます。
A1,A2
0.1,1
0.2,2
0.3,3
次にcsvファイルの読み込みについて確認します。
import pandas as pd
df = pd.read_csv("sample2.csv")
print(df)
・実行結果
A1 A2
0 0.1 1
1 0.2 2
2 0.3 3
上記のようにread_csv
メソッドを用いることでcsvファイルの読み込みを行うことができます。
カラムの追加
pandas
では辞書型に似たような表記に基づいてカラムの追加を行うことができます。カラムの追加はたとえば下記を実行することで行うことができます。
import pandas as pd
df1 = pd.read_csv("sample2.csv")
df2 = pd.read_csv("sample2.csv")
df2["A3"] = df2["A2"]**2
print(df1)
print(df2)
・実行結果
A1 A2
0 0.1 1
1 0.2 2
2 0.3 3
A1 A2 A3
0 0.1 1 1
1 0.2 2 4
2 0.3 3 9
ソート
pandas
でソートを実装するにあたってはpandas.DataFrame.sort_values()
やpandas.DataFrame.sort_index()
を用いれば良いです。まずpandas.DataFrame.sort_values()
について確認します。
import pandas as pd
df1 = pd.DataFrame({'A1': [1, 2, 3, 4, 5], 'A2': [1, -2, 3, -4, 5]})
print(df1)
df2 = df1.sort_values('A2')
print(df2)
df3 = df2.sort_values('A1')
print(df3)
・実行結果
A1 A2
0 1 1
1 2 -2
2 3 3
3 4 -4
4 5 5
A1 A2
3 4 -4
1 2 -2
0 1 1
2 3 3
4 5 5
A1 A2
0 1 1
1 2 -2
2 3 3
3 4 -4
4 5 5
上記よりsort_values
メソッドにカラム名を引数に与えることで対応するカラムの値に基づいてソートを行うことができます。デフォルトではsort_values
メソッドは昇順でソートされますが、降順でソートする場合は下記のようにascending=False
を指定すれば良いです。
import pandas as pd
df1 = pd.DataFrame({'A1': [1, 2, 3, 4, 5], 'A2': [1, -2, 3, -4, 5]})
print(df1)
df2 = df1.sort_values('A2', ascending=False)
print(df2)
df3 = df2.sort_values('A1', ascending=False)
print(df3)
・実行結果
A1 A2
0 1 1
1 2 -2
2 3 3
3 4 -4
4 5 5
A1 A2
4 5 5
2 3 3
0 1 1
1 2 -2
3 4 -4
A1 A2
4 5 5
3 4 -4
2 3 3
1 2 -2
0 1 1
sort_values
メソッドと同様にsort_index
メソッドは下記のように実行することができます。
import pandas as pd
df1 = pd.DataFrame({'A1': [1, 2, 1, 2, 1], 'A2': [1, -2, 3, -4, 5]})
print(df1)
df2 = df1.sort_values('A1')
print(df2)
df3 = df2.sort_index()
print(df3)
・実行結果
A1 A2
0 1 1
1 2 -2
2 1 3
3 2 -4
4 1 5
A1 A2
0 1 1
2 1 3
4 1 5
1 2 -2
3 2 -4
A1 A2
4 1 5
3 2 -4
2 1 3
1 2 -2
0 1 1
SQLのような使い方①(検索)
下記のようなプログラムを実行することでpandas
で検索を行うことができます。
import pandas as pd
df1 = pd.DataFrame({'A1': [1, 2, 1, 2, 1], 'A2': [1, -2, 3, -4, 5]})
print(df1)
df2 = df1[df1['A1'] == 2]
print(df2)
df3 = df1[(df1['A1'] == 2) & (df1['A2'] == -2)]
print(df3)
・実行結果
A1 A2
0 1 1
1 2 -2
2 1 3
3 2 -4
4 1 5
A1 A2
1 2 -2
3 2 -4
A1 A2
1 2 -2
SQLのような使い方②(集計)
下記のようにpandas.DataFrame.groupby
を用いることでpandas
で集計を行うことができます。
import pandas as pd
df1 = pd.DataFrame({'A1': [1, 2, 1, 2, 1], 'A2': [1, -2, 3, -4, 5]})
print(df1)
print(df1.groupby('A1').sum())
print(df1.groupby('A1').count())
print(df1.groupby('A1').mean())
print(df1.groupby('A1').max())
print(df1.groupby('A1').min())
・実行結果
A1 A2
0 1 1
1 2 -2
2 1 3
3 2 -4
4 1 5
A2
A1
1 9
2 -6
A2
A1
1 3
2 2
A2
A1
1 3.0
2 -3.0
A2
A1
1 5
2 -2
A2
A1
1 1
2 -4