LoginSignup
5
0

More than 1 year has passed since last update.

DataFrameでcolumn名の異なる列を縦に結合する。

Last updated at Posted at 2021-08-27

状況

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)

image.png

絶妙に困りますよねこれ…。

解決策

名前を一致させてから、結合する。

# 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)

image.png

解説

colum名変更

データ.rename(columns={'変更前の名前': '変更後の名前'})でDataFrameのcolum名を変更できます。

# colum名変更
df_food_A = df_A.rename(columns={'fruits': 'food'}) 

image.png
これは便利ですね。

縦結合

concatで縦に結合します。
名前が同じものは、統合されるようです。

このとき、ignore_index=Trueを引数に指定しておくことで、index番号をきれいに順番にすることができます。

df_food = pd.concat([df_food_A, df_food_B], ignore_index=True)

image.png

参考

下記を参考にさせていただきました。
ラベル名が異なる場合のmergeについて
Pandas
指定した軸の方向にDataFrameを結合するPandasのconcat関数の使い方

読んでいただき、ありがとうございました。

5
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0