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
メソッドを使う。
と書かれているが、コメントにある通り実際に使っているのはリストを使ったカラム順の指定である。