我有一个pandas数据帧
date_hour content
0 2016-10-17 00:00:00 [{"81": 0.0, "82": 0.0, "83": 0.0}]
1 2016-10-17 01:00:00 [{"81": 0.0, "82": 0.0, "83": 0.0}]
我想将df.content展平为像这样的数据框
81 82 83
2016-10-17 00:00:00 0 0 0
2016-10-17 01:00:00 0 0 0
我怎样才能做到这一点?
我试过了:
# work for one item, though I can concat them, but it's slow(I have each json of 7k k/v pairs), took 2.5s for each
pd.read_json(df.head(1).content.item(), orient='records')
答案 0 :(得分:2)
您可以使用apply
函数中的pd.Series将Series对象中的字典转换为列,然后使用pd.concat
方法将date_hour
列与扩展数据框绑定:
import pandas as pd
pd.concat([df.date_hour, df.content.apply(lambda x: pd.Series(x[0]))], axis=1)
# date_hour 81 82 83
#0 2016-10-17 00:00:00 0.0 0.0 0.0
#1 2016-10-17 01:00:00 0.0 0.0 0.0
答案 1 :(得分:2)
使用str[0]
抓住第一个元素
pd.DataFrame(df.content.str[0].tolist()).set_index(df.date_hour)
81 82 83
date_hour
2016-10-17 00:00:00 0.0 0.0 0.0
2016-10-17 01:00:00 0.0 0.0 0.0