状況
DataFrameのColumn名の異なる列を、ひとつの列にしたい。
まず仮のDataFrameを用意します。
import pandas as pd
list_A = [["apple", 100], ["banana", 200], ["orange", 300]]
list_B = [["potato", 30], ["carrot", 20], ["lettuce", 10]]
df_A = pd.DataFrame(data=list_A, columns=["fruits", "price"])
df_B = pd.DataFrame(data=list_B, columns=["vegetables", "weight"])
fruits | price | |
---|---|---|
0 | apple | 100 |
1 | banana | 200 |
2 | orange | 300 |
vegetables | weight | |
---|---|---|
0 | potato | 30 |
1 | carrot | 20 |
2 | lettuce | 10 |
例えば、fruitsの列とvegetablesの列を一緒のfoodの列にしたいとします。
このままpandasの関数concatで2つのDataFrameを縦結合をしようとすると、以下のようにfruitsとvegetablesの列は別の列になってしまします。
# 縦結合
df_food = pd.concat([df_A, df_B], ignore_index=True)
絶妙に困りますよねこれ…。
解決策
名前を一致させてから、結合する。
# colum名変更
df_food_A = df_A.rename(columns={'fruits': 'food'})
df_food_B = df_B.rename(columns={'vegetables': 'food'})
# 縦結合
df_food = pd.concat([df_food_A, df_food_B], ignore_index=True)
解説
colum名変更
データ.rename(columns={'変更前の名前': '変更後の名前'})
でDataFrameのcolum名を変更できます。
# colum名変更
df_food_A = df_A.rename(columns={'fruits': 'food'})
縦結合
concat
で縦に結合します。
名前が同じものは、統合されるようです。
このとき、ignore_index=True
を引数に指定しておくことで、index番号をきれいに順番にすることができます。
df_food = pd.concat([df_food_A, df_food_B], ignore_index=True)
参考
下記を参考にさせていただきました。
ラベル名が異なる場合のmergeについて
Pandas
指定した軸の方向にDataFrameを結合するPandasのconcat関数の使い方