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 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