2017-02-06 30 views
1

我有一個熊貓數據幀如何扁了熊貓系列JSON字符串成一個數據幀

  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

使用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 
+0

是的,'str [0]'很好 – jezrael

2

可以使用pd.Series在apply功能字典轉換的一系列對象的列,然後使用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