假设我具有以下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方法?
答案 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