Pandas のリストを 1 つのシリーズにまとめる 質問する

Pandas のリストを 1 つのシリーズにまとめる 質問する

文字列のリストの Pandas シリーズがあります:

0                           [slim, waist, man]
1                                [slim, waistline]
2                                     [santa]

ご覧のとおり、リストの長さはさまざまです。これを1つのシリーズにまとめる効率的な方法が欲しいです。

0 slim
1 waist
2 man
3 slim
4 waistline
5 santa

リストを分割する方法は知っています

series_name.split(' ')

しかし、それらの文字列を 1 つのリストに戻すのは困難です。

ありがとう!

ベストアンサー1

パンダのバージョンでは、0.25.0新しいメソッド「explode」が登場しました。シリーズそしてデータフレーム古いバージョンにはそのようなメソッドはありません。

必要な結果を構築するのに役立ちます。

たとえば、次のようなシリーズがあります:

import pandas as pd

s = pd.Series([
    ['slim', 'waist', 'man'],
    ['slim', 'waistline'],
    ['santa']])

次に、

s.explode()

このような結果を得るには:

0         slim
0        waist
0          man
1         slim
1    waistline
2        santa

データフレームの場合:

df = pd.DataFrame({
  's': pd.Series([
    ['slim', 'waist', 'man'],
    ['slim', 'waistline'],
    ['santa']
   ]),
   'a': 1
})

次のような DataFrame が作成されます。

                    s  a
0  [slim, waist, man]  1
1   [slim, waistline]  1
2             [santa]  1

列に爆発を適用しますs:

df.explode('s')

次のような結果が得られます:

           s  a
0       slim  1
0      waist  1
0        man  1
1       slim  1
1  waistline  1
2      santa  1

シリーズに空のリストが含まれている場合

import pandas as pd

s = pd.Series([
    ['slim', 'waist', 'man'],
    ['slim', 'waistline'],
    ['santa'],
    []
])

を実行すると、explode次のように空のリストに NaN 値が導入されます。

0         slim
0        waist
0          man
1         slim
1    waistline
2        santa
3          NaN

これを望まない場合は、ドロップナメソッド呼び出し:

s.explode().dropna()

この結果を得るには:

0         slim
0        waist
0          man
1         slim
1    waistline
2        santa

データフレームにはドロップナ方法:

df = pd.DataFrame({
  's': pd.Series([
    ['slim', 'waist', 'man'],
    ['slim', 'waistline'],
    ['santa'],
    []
   ]),
   'a': 1
})

dropnaなしで実行中explode:

df.explode('s')

結果は次のようになります:

           s  a
0       slim  1
0      waist  1
0        man  1
1       slim  1
1  waistline  1
2      santa  1
3        NaN  1

dropna と:

df.explode('s').dropna(subset=['s'])

結果:

           s  a
0       slim  1
0      waist  1
0        man  1
1       slim  1
1  waistline  1
2      santa  1

おすすめ記事