Pandasで行の追加(縦方向の連結)の操作メモ

pythonのデータフレームライブラリPandasで、行の追加(縦方向の連結)の操作メモ。列の追加(横方向の結合)ではなく。一行だけ追加する感じで。

基本はappendとconcat。列名で一致しないところはNaNで埋められる。ついでにインデックスが重複する時はreset_index()。

目次

やること

pandasで行を追加する。たとえばdf1に一行だけのdf2を追加する感じを想定。

この場合、df1.append(df2)か、pd.concat([df1,df2])を使う。

append

appendを使って追加。

import pandas as pd

df1 = pd.DataFrame({'one': [1,2,3], 'two': [10,20,30]}, index=['a','b','c'])
df2 = pd.DataFrame({'one': [4], 'three': [400]}, index=['d'])

df = df1.append(df2)

print(df)

結果は以下。

   one  three   two
a    1    NaN  10.0
b    2    NaN  20.0
c    3    NaN  30.0
d    4  400.0   NaN

列名が一致しないところはNaNで埋められる点に注意。それに合わせて他行の型も小数になってますな。

concat

concatを使って追加。

import pandas as pd

df1 = pd.DataFrame({'one': [1,2,3], 'two': [10,20,30]}, index=['a','b','c'])
df2 = pd.DataFrame({'one': [4], 'three': [400]}, index=['d'])

df = pd.concat([df1,df2])

print(df)

結果は上に同じ。

axis=1とすると、joinのように縦方向の結合となる。

appendとconcat

appendとconcatで内部的には挙動が異なるようで、concatでうまく連結できなかったときにも(何故できなかったのかわからない…)appendではうまくいくこともあった。「pandasのデータフレームを連結したときに列の順番を変えない。 - Qiita」のようなこともあるらしい。

インデックスが重複するので振り直す

もしインデックスが重複して、それが具合が悪い時には、処置をしないといけない。たとえばreset_index()で番号を振り直す。

df = pd.concat([df1,df2]).reset_index(drop=True)

オプションのdrop=Trueは、元のインデックスを削除する。普通にreset_index()とすると、元のインデックスが新たに列として作られる(参考「pandas.DataFrame, Seriesのインデックスを振り直すreset_index | note.nkmk.me」)。

参考

参考にさせていただきました。ありがとうございます。

本サイトはUXを悪くするevilなGoogle広告を消しました。応援してくださる方は おすすめガジェット を見ていってください!
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次