Python

pandasのデータフレーム結合時にカラム順が変わるのを防ぐ

pandasのデータフレーム結合時にカラム順が変わるのを防ぐ

Pythonでよく使われるpandasデータフレーム。
データフレーム同士を結合すると、カラムの順番が意図しないものになることがある。
今回はデータフレーム結合時にカラム順が変わるのを防ぐ方法を紹介する。


カラム順が意図しないものになる例

データフレーム df1df2 があり、それぞれ同じカラムを持っているが、カラム順が同じでない場合、 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 メソッドを使う。

と書かれているが、コメントにある通り実際に使っているのはリストを使ったカラム順の指定である。

参考:
pandasのデータフレームを連結したときに列の順番を変えない。 - Qiita

KRSW

駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

役に立ったらシェアしてくれると励みになります。
If you felt this article is useful, please share.
にほんブログ村 IT技術ブログへ

-Python
-,

Translate »
Social media & sharing icons powered by UltimatelySocial

Copyright© ITips , 2020 All Rights Reserved.