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

ITipsと同じようなブログを作る方法

ブログに興味がありますか?

もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

ランキング参加中

にほんブログ村 IT技術ブログへ

他にもブログやSNSで紹介してくれると励みになります。

はてブのコメントで酷評されると泣きます(´;ω;`)

-Python
-,

© 2024 ITips