RuntaScience diary

気象系データを扱う学生 旅が好きです

【Pandas】Python Pandas基礎編(DataFrame結合 concat, merge, join)

この記事をシェアする

f:id:RuntaScience:20210106091528p:plain



こんにちは

Pandasを用いたデータフレームの結合(縦方向・横方向)についてです! 

 

始める前に 

まずはpandasをインポートしましょう

import pandas as pd

 

横方向

例として用いるデータフレーム

 

f:id:RuntaScience:20210106084614p:plain

import numpy as np
data1 = np.array([["2020-01-01",5]
                 ,["2020-01-02",3]
                 ,["2020-01-03",4]
                 ,["2020-01-04",2]
                 ,["2020-01-05",2]
                 ,["2020-01-06",5]
                 ,["2020-01-07",5]
                 ,["2020-01-08",4]
                 ,["2020-01-09",4]
                 ,["2020-01-10",4]])
df1 = pd.DataFrame(data1, columns=["Time", "Tokyo"])

data2= np.array([["2020-01-01",-1]
                 ,["2020-01-02",-4]
                 ,["2020-01-03",-4]
                 ,["2020-01-04",-2]
                 ,["2020-01-05",-2]
                 ,["2020-01-06",-5]
                 ,["2020-01-07",-5]
                 ,["2020-01-08",-4]
                 ,["2020-01-09",-4]
                 ,["2020-01-10",-4]])
df2 = pd.DataFrame(data2,columns=["Time", "Nagano"])

pd.concat()

pd.concat()は縦軸(axis=0)または横軸(axis=1)を軸として複数のデータフレームを結合できます。

 

f:id:RuntaScience:20210106085045p:plain

df3 = pd.concat([df1, df2], axis=1, keys="TN")
df3

※keysで複数のデータフレームの頭文字を付けることができる。例えば、3つのデータフレームのTokyo、Nagano、Okinawaを結合するとしたら、keys="TNO"とできる。

f:id:RuntaScience:20210106085211p:plain

Tokyoのみを取り出したいときは、以下のようにします。

df3["T"]

 

pandas.concat — pandas 1.2.0 documentation

 

.join()

.join()はindexを軸として、2つのデータフレームを結合できます。

同じカラムを区別して結合できます。

 

f:id:RuntaScience:20210106085543p:plain

df3 = df1.join(df2, lsuffix="_Tokyo", rsuffix="_Nagano")
df3

l※suffixは左側の重複カラムにラベルを付け、rsuffixは右側。 

pandas.DataFrame.join — pandas 1.2.0 documentation

pd.merge()

pd.merge()はindexまたはcolumnを軸として2つのデータフレームを結合できます。

同じカラムは結合されます。今回は「Time」が結合されました。

f:id:RuntaScience:20210106085602p:plain

df3 = pd.merge(df1, df2)
df3

 

pandas.merge — pandas 1.2.0 documentation

 

 

縦方向

例として用いるデータフレーム

 

f:id:RuntaScience:20210106085957p:plain

import numpy as np
data_a = np.array([["2020-01-01",5]
                 ,["2020-01-02",3]
                 ,["2020-01-03",4]
                 ,["2020-01-04",2]
                 ,["2020-01-05",2]])
df_a = pd.DataFrame(data_a,columns=["Time", "Tokyo"])
data_b = np.array([["2020-01-06",5]
                 ,["2020-01-07",3]
                 ,["2020-01-08",4]
                 ,["2020-01-09",2]
                 ,["2020-01-10",2]])
df_b = pd.DataFrame(data_b,columns=["Time", "Tokyo"])

 

pd.concat()

縦方向の結合にはpd.concat()が多用されます。

pd.concat()は縦軸(axis=0)または横軸(axis=1)を軸として複数のデータフレームを結合できます。

同じカラムは結合されます。

f:id:RuntaScience:20210106090222p:plain

df_c = pd.concat([df_a, df_b], ignore_index=True)
df_c

※ignore_index=Trueでインデックスを振りなおし 

pandas.concat — pandas 1.2.0 documentation

 

 

.append()

.append()は2つデータフレームあるいはシリーズを縦方向に結合できます。

f:id:RuntaScience:20210106090111p:plain

df_c = df_a.append(df_b).reset_index(drop=True)
df_c

※①df_a.append(df_b)

 ②.reset_index(drop=True) 

pandas.Series.append — pandas 1.2.0 documentation

pandas.DataFrame.append — pandas 1.2.0 documentation

 

それでは

 

参考文献

pandas.pydata.org

pandas.pydata.org

pandas.pydata.org

pandas.pydata.org

最終更新日

2021/1/6

 

 

プライバシーポリシー
お問い合わせ