Pandas - 展平列,这是一个词典列表

Era*_*she 3 python pandas

假设我有以下DataFrame:

import pandas as pd
df = pd.DataFrame({'events': [ [{'event_text': 'hello1'}, {'event_text': 'hello2'}],
                                [{'event_text': 'whats up?'}],
                                [{'event_text': 'all good'}, {'event_text': 'bye'}] ]})

print(df)
                                              events
0  [{'event_text': 'hello1'}, {'event_text': 'hel...
1                      [{'event_text': 'whats up?'}]
2  [{'event_text': 'all good'}, {'event_text': 'b...
Run Code Online (Sandbox Code Playgroud)

我试图将所有文本提取到一个列中,如下所示:

0     hello1
1     hello2
2  whats up?
3   all good
4        bye
Run Code Online (Sandbox Code Playgroud)

我认为解决方案涉及json_normalize.我尝试过以下方法:

from pandas.io.json import json_normalize
df['events'].apply(json_normalize)
Run Code Online (Sandbox Code Playgroud)

但它产生了以下结果:

0      event_text
0     hello1
1     hello2
1                   event_text
0  whats up?
2      event_text
0   all good
1        bye
Run Code Online (Sandbox Code Playgroud)

任何Pythonic方式来处理这个?

jez*_*ael 8

在列表理解中使用展平和get选择event_text,将其传递给Series:

s = pd.Series([y.get('event_text') for x in df['events'] for y in x])
print (s)
0       hello1
1       hello2
2    whats up?
3     all good
4          bye
dtype: object
Run Code Online (Sandbox Code Playgroud)