如何将pson系列的json字符串展平为数据帧

时间:2017-02-06 03:18:40

标签: python json pandas

我有一个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')

2 个答案:

答案 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