appendからconcatへの移行.Py

appendよ死んでしまうとはなさけない

 データフレームに行を追加するときに便利なappendちゃんがお亡くなりになりました。後釜はconcatちゃんでよろしくねって言われてます。
 でもconcatちゃんに追加行となる値セットを渡すと、appendちゃんと違う挙動をするんですよね。例えば3値からなるシリーズをappendちゃんなら1行3列にして追加してくれるんですけど、concatちゃんは3行1列にして追加しようとしちゃう。困った。
 おおappendよ死んでしまうとはなさけない。まあconcatちゃんがなさけないという話なんですが。(使いこなせないお前がなさけない?ごもっとも。)

concatでの行追加はリストのネスト

 話題のchatGPTちゃんに聞いてみると、行として追加したい行をリストして、さらにネストしてから与えてね、って教えてくれました。え?マジで? 

import pandas as pd

# append相手のDataFrameを空集合で作成
df = pd.DataFrame()

# appendしたい行
list = ["Bob", "M", "34"]

# appendしたい行をDataFrameにする
df_append = pd.DataFrame(data=[list], columns=["name", "gender", "age"])

# DataFrame同士をconcatする
df = pd.concat([df, df_append], ignore_index=True, axis=0)

# 結果
print(df)
-------
  name gender age
0  Bob      M  34

 試しにわざわざ追加行をlistとして分離して書いてみると、たしかにpd.concatでも結合するDataFrameをリスト形式で与えているし、pandasならベーシックにはそういうことだよねっていう感じになる。
 とはいえ実務上はname、gender、ageはスカラーな値としてどこからか取ってきてpd.DataFrame(data=[name, …])としがち。
 そこをdata=[[name, …]]とnested listで与える、つまり追加行にするリストを要素として持つ1次元リストを与えれば解決。

 参考として、Seriesを行として追加しようとしたときも同様に沼ったのだけど、結果的には上記のような形式的なnested listでdata=に与えてあげる方がスッキリ書けたのだった。
 誰だ、列で追加してtransposeしたらって言ったやつは。

以上。

いいなと思ったら応援しよう!