「アウトプットと言う名の備忘録@Texas」

日本じゃない何処かの脳筋パイソニスタによる何かしらの走り書き

【Pandas最強説2】リストを含むDataFrameを展開するのが超絶簡単だった!

結論

DataFrame.explode(column, ignore_index=False)メソッドを使う事でDataFrameに含まれるリストを展開、中身の値を列へと変換できるようになっていた!(注意:バージョン 0.25.0から)

pandas.pydata.org


実際に使ってみる

動作環境

Python 3.6
Pandas 1.1.3

シナリオ

とあるスーパーで売れた商品をスプレッドシートで細かく把握したい。

       customer                  items
0  customer-000  [Milk, Eggs, Bananas]
1  customer-001  [Chicken, Beef, Pork]
2  customer-002                  Pasta

ただこのままCSVに変換してしまうと

f:id:At_sashimi_py:20201029061947p:plain
リストのまま1つのセルに泣

リストがそのまま1つのセルに。。

そのリストを縦に展開してこうしたい!

       customer    items
0  customer-000     Milk
0  customer-000     Eggs
0  customer-000  Bananas
1  customer-001  Chicken
1  customer-001     Beef
1  customer-001     Pork
2  customer-002    Pasta

実践


とりあえずimport

import pandas as pd

テストDataframe

df = pd.DataFrame(
    columns=['customer', 'items'],
    data=[
        ['customer-000', ['Milk', 'Eggs', 'Bananas']],
        ['customer-001', ['Chicken', 'Beef', 'Pork']],
        ['customer-002', 'Pasta']
    ]
)


あとは例のDataFrame.explode(column, ignore_index=False)メソッドを使い展開したいコラムを指定すれば、

exploded_df = df.explode("items")

たったの1行て!?

print(exploded_df)
       customer    items
0  customer-000     Milk
0  customer-000     Eggs
0  customer-000  Bananas
1  customer-001  Chicken
1  customer-001     Beef
1  customer-001     Pork
2  customer-002    Pasta

欲しかったやつ!


あとお馴染みのdDataFrame.to_csv()
pandas.pydata.org


exploded_df.to_csv('explode_test.csv')
f:id:At_sashimi_py:20201029061902p:plain
簡単すぎてもう、ありがとう!


本当にもうPandasさんありがとうございますっ!!



というわけで、以上DataFrame内のリストを縦に展開する方法でした!

今日も頭のいい先人たちに感謝!



前回の【Pandas最強説】記事はこちら
atsashimipy.hatenablog.com