
Pythonでよく使われるpandasデータフレーム。
データフレーム同士を結合すると、カラムの順番が意図しないものになることがある。
今回はデータフレーム結合時にカラム順が変わるのを防ぐ方法を紹介する。
カラム順が意図しないものになる例
データフレーム df1 と df2 があり、それぞれ同じカラムを持っているが、カラム順が同じでない場合、 pd.concat などでデータフレーム同士を結合すると、片方のカラム順に合わせる事になる。
下の例だとカラムA、Bの順でデータを持ちたくても、結合によってはB、Aの順になってしまう。
import pandas as pd
df1 = pd.DataFrame([[2, 1], [4, 3]], columns=['B', 'A'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns=['A', 'B'])
print("df1")
print(df1)
# B A
# 0 2 1
# 1 4 3
print("df2")
print(df2)
# A B
# 0 5 6
# 1 7 8
df_concat = pd.concat([df1, df2], ignore_index=True, sort=False)
print("df_concat")
print(df_concat)
# B A
# 0 2 1
# 1 4 3
# 2 6 5
# 3 8 7
解決方法
解決方法としてはカラム順を指定したリスト col_list を作り、 df[col_list] の形式でカラムの順番を指定してしまう事。
df_concat2 = pd.concat([df1, df2], ignore_index=True, sort=False)[df2.columns.to_list()]
print("df_concat2")
print(df_concat2)
# A B
# 0 1 2
# 1 3 4
# 2 5 6
# 3 7 8
サンプルコード:
yKRSW/sample_df_concat_order: Sample of keeping column order of dataframe
参考にしたQiitaの記事では
列の順番を変えないためには、
DataFrame.appendメソッドを使う。
と書かれているが、コメントにある通り実際に使っているのはリストを使ったカラム順の指定である。


