Pandas で複数の列を分解する

Olorunfemi Akinlua 2023年6月21日
  1. explode() 関数を使用して Pandas で複数の列を分解する
  2. Series.explode を使用して Pandas で複数の列を分解する
Pandas で複数の列を分解する

アクセスできるデータには、文字列から配列やリストまで、さまざまなデータ型を含めることができます。 通常、操作が簡単な数値 (整数と浮動小数点数) と文字列を好みます。

データフレーム セル内にリストがある場合、それらをどのように扱うのでしょうか? このトピックで説明する Pandas ライブラリで explode() 関数を使用できます。

explode() 関数を使用して Pandas で複数の列を分解する

explode() 関数 を使用すると、リスト要素を持つ Dataframe セルが行に変換され、インデックス値が複製され、展開されたリストを含む Dataframe が返されます。 explode() 関数を使用する前に、リスト要素を含むデータフレームを作成しましょう。

コード例:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "A": ["1", "2", "3", "4"],
        "B": [["11", "12"], ["13", "14"], ["15", "16"], ["17", "18"]],
        "C": [["31", "32"], ["33", "43"], ["56", "67"], ["78", "87"]],
        "D": [["41", "42"], ["34", "47"], ["55", "66"], ["77", "88"]],
        "E": [["51", "52"], ["35", "45"], ["56", "76"], ["97", "68"]],
    }
)

print(df)

出力:

    A         B         C         D         E
0  1  [11, 12]  [31, 32]  [41, 42]  [51, 52]
1  2  [13, 14]  [33, 43]  [34, 47]  [35, 45]
2  3  [15, 16]  [56, 67]  [55, 66]  [56, 76]
3  4  [17, 18]  [78, 87]  [77, 88]  [97, 68]

データフレームを分解するには、分解する必要がある column を渡す必要があります。 複数の列を展開できますが、1つの列 B から始めましょう。

print(df.explode("B"))

出力:

    A   B         C         D         E
0  1  11  [31, 32]  [41, 42]  [51, 52]
0  1  12  [31, 32]  [41, 42]  [51, 52]
1  2  13  [33, 43]  [34, 47]  [35, 45]
1  2  14  [33, 43]  [34, 47]  [35, 45]
2  3  15  [56, 67]  [55, 66]  [56, 76]
2  3  16  [56, 67]  [55, 66]  [56, 76]
3  4  17  [78, 87]  [77, 88]  [97, 68]
3  4  18  [78, 87]  [77, 88]  [97, 68]

ご覧のとおり、インデックスを複製し、リスト要素を分離してセルを作成します。 元のインデックスを使用したくない場合は、ignore_index パラメータを使用して新しいインデックスに置き換えることができます。

True に設定すると、元のインデックスが新しいインデックスに置き換えられます。

    A   B         C         D         E
0  1  11  [31, 32]  [41, 42]  [51, 52]
1  1  12  [31, 32]  [41, 42]  [51, 52]
2  2  13  [33, 43]  [34, 47]  [35, 45]
3  2  14  [33, 43]  [34, 47]  [35, 45]
4  3  15  [56, 67]  [55, 66]  [56, 76]
5  3  16  [56, 67]  [55, 66]  [56, 76]
6  4  17  [78, 87]  [77, 88]  [97, 68]
7  4  18  [78, 87]  [77, 88]  [97, 68]

複数の列に基づいてデータフレームを分解することもできます。

print(df.explode(["B", "C", "D", "E"], ignore_index=True))

出力:

    A   B   C   D   E
0  1  11  31  41  51
1  1  12  32  42  52
2  2  13  33  34  35
3  2  14  43  47  45
4  3  15  56  55  56
5  3  16  67  66  76
6  4  17  78  77  97
7  4  18  87  88  68

Series.explode を使用して Pandas で複数の列を分解する

Series.explode 関数 は pandas の explode() 関数と同じことを行い、関数と一緒に apply() 関数を使用してデータフレーム全体を爆発させることができます。 列に基づいてインデックスを設定し、explode() 関数を適用してから、reset_index() 関数を使用してインデックスをリセットできます。

print(df.set_index(["A"]).apply(pd.Series.explode).reset_index())

出力:

    A   B   C   D   E
0  1  11  31  41  51
1  1  12  32  42  52
2  2  13  33  34  35
3  2  14  43  47  45
4  3  15  56  55  56
5  3  16  67  66  76
6  4  17  78  77  97
7  4  18  87  88  68
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

関連記事 - Pandas Column