文字列のリストの 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