dfの操作:dfの結合
【書式】
【コード】
import pandas as pd
# テスト用dfの作成
df1 = pd.DataFrame({'学生番号': ['001','002','003','004'],
'試験結果': ['不合格','合格','合格','合格'],
'試験区分':['A','B','C','A']})
df2 = pd.DataFrame({'学生番号': ['001','002','003','005'],
'親の職業': ['会社員','会社員','政治家','スポーツ選手']})
df3 = pd.DataFrame({'試験区分': ['A','B','C'],
'試験区分名': ['一般','推薦','裏口']})
print("df1")
print(df1)
print("\n")
print("df2")
print(df2)
print("\n")
print("df3")
print(df3)
【結果】
df1
学生番号 試験結果 試験区分
0 001 不合格 A
1 002 合格 B
2 003 合格 C
3 004 合格 A
df2
学生番号 親の職業
0 001 会社員
1 002 会社員
2 003 政治家
3 005 スポーツ選手
df3
試験区分 試験区分名
0 A 一般
1 B 推薦
2 C 裏口
【書式】
pd.merge(df1,df2,on="キー列名",how="結合方法")
キーとなる列名が複数となる場合は、列名のリストを引数として渡す
結合方法のオプションは次の通り(デフォルトは'inner')
【コード】
# df1とdf2を学生番号で内部結合する
df4=pd.merge(df1,df2,on="学生番号",how="inner")
print(df4)
# df1とdf2を学生番号で左外部結合する
df5=pd.merge(df1,df2,on="学生番号",how="left")
print(df5)
# df1とdf2を学生番号で右外部結合する
df6=pd.merge(df1,df2,on="学生番号",how="right")
print(df6)
# df1とdf2を学生番号で完全外部結合する
df6=pd.merge(df1,df2,on="学生番号",how="outer")
print(df6)
【結果】
学生番号 試験結果 試験区分 親の職業
0 001 不合格 A 会社員
1 002 合格 B 会社員
2 003 合格 C 政治家
学生番号 試験結果 試験区分 親の職業
0 001 不合格 A 会社員
1 002 合格 B 会社員
2 003 合格 C 政治家
3 004 合格 A NaN
学生番号 試験結果 試験区分 親の職業
0 001 不合格 A 会社員
1 002 合格 B 会社員
2 003 合格 C 政治家
3 005 NaN NaN スポーツ選手
学生番号 試験結果 試験区分 親の職業
0 001 不合格 A 会社員
1 002 合格 B 会社員
2 003 合格 C 政治家
3 004 合格 A NaN
4 005 NaN NaN スポーツ選手
データが無いところは、NaNが返ってくる。
【書式】
同じ列名にデータを継ぎ足していく
pd.concat([df1,df2,df3])
【コード】
# df1,df2,df3を結合する
df4=pd.concat([df1,df2,df3])
print(df4)
【結果】
学生番号 試験結果 試験区分 親の職業 試験区分名
0 001 不合格 A NaN NaN
1 002 合格 B NaN NaN
2 003 合格 C NaN NaN
3 004 合格 A NaN NaN
0 001 NaN NaN 会社員 NaN
1 002 NaN NaN 会社員 NaN
2 003 NaN NaN 政治家 NaN
3 005 NaN NaN スポーツ選手 NaN
0 NaN NaN A NaN 一般
1 NaN NaN B NaN 推薦
2 NaN NaN C NaN 裏口
【書式】
単純に列方向に継ぎ足す
pd.concat([df1,df2,df3],axis=1)
【コード】
# df1,df2,df3を結合する
df4=pd.concat([df1,df2,df3],axis=1)
print(df4)
【結果】
学生番号 試験結果 試験区分 学生番号 親の職業 試験区分 試験区分名
0 001 不合格 A 001 会社員 A 一般
1 002 合格 B 002 会社員 B 推薦
2 003 合格 C 003 政治家 C 裏口
3 004 合格 A 005 スポーツ選手 NaN NaN