pandasでリストとして格納されている各要素を展開する

pandasに長さが等しいリストが格納されており、そのリストを展開して、それぞれ独立したカラムする方法をメモしておきます。

github

  • jupyter notebook形式のファイルはこちら

google colaboratory

  • google colaboratory で実行する場合はこちら

筆者の環境

筆者のOSはmacOSです。LinuxやUnixのコマンドとはオプションが異なります。

!sw_vers
ProductName:		macOS
ProductVersion:		13.5.1
BuildVersion:		22G90
!python -V
Python 3.9.17

基本的なライブラリをインポートしそのバージョンを確認しておきます。

%matplotlib inline

import pandas as pd

print('pandas version :', pd.__version__)
pandas version : 2.0.3

サンプルデータの準備

df = pd.DataFrame(
    {
        "user_id": ["A", "B", "C"],
        "item_id": [["PC", "Book"], ["Book", "Table"], ["Desk", "CD"]],
    }
)

df.head()
user_iditem_id
0A[PC, Book]
1B[Book, Table]
2C[Desk, CD]

結論

展開したいカラムをpd.Seriesを引数にapplyを適用します。 item_idカラムに対して適用し、適当にカラム名を設定します。

df.item_id.apply(pd.Series).set_axis(["col1", "col2"], axis=1)
col1col2
0PCBook
1BookTable
2DeskCD

必要なカラムだけに適用したいので、popjoinを利用します。

df.join(df.pop("item_id").apply(pd.Series).set_axis(["col1", "col2"], axis=1))
user_idcol1col2
0APCBook
1BBookTable
2CDeskCD

想定通りのDataFrameができました。