熊猫-展平一列词典列表

时间:2019-01-03 06:14:13

标签: 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...

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

0     hello1
1     hello2
2  whats up?
3   all good
4        bye

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

from pandas.io.json import json_normalize
df['events'].apply(json_normalize)

但是它产生了以下结果:

0      event_text
0     hello1
1     hello2
1                   event_text
0  whats up?
2      event_text
0   all good
1        bye

任何处理此问题的Python方法?

1 个答案:

答案 0 :(得分:8)

在列表理解中使用flattening,并在选择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