問題
pandas のデータフレームを pd.concat
を用いて連結したとき、列の順番が勝手に変わってしまうことがある。
>>> df = pd.DataFrame([[1, 2], [3, 4]], index=[0, 1], columns=['B', 'A'])
>>> df2 = pd.DataFrame([[1, 2], [3, 4]], index=[0, 1], columns=['A', 'B'])
>>> pd.concat([df, df2])
A B # df に合わせて B A がいい!
0 2 1
1 4 3
0 1 2
1 3 4
解決方法
列の順番を変えないためには、DataFrame.append
メソッドを使う。
>>> df.append(df2)[df.columns.tolist()]
B A
0 1 2
1 3 4
0 2 1
1 4 3
これで df
の列の順番を保ったままデータフレームを結合できる。複数のデータフレームを結合する場合は、df.append([df1, df2])
などデータフレームのリストを渡せばいい。
ただし、DataFrame.append
は遅いのでたくさんの行を結合する場合は使わないほうがよい。
参考
追記
実行環境を書き忘れていたので追記
- Python 3.6.1
- pandas 0.19.2