2017-07-18 118 views
4

我是一个begginer,它已经很长一段时间了,我没有编写任何代码:-)我使用请求库从Incapsula(云网络安全服务)API来获取关于网站的一些统计信息。我最终想要的是将“交通类型,时间戳和编号”写入文件以创建报告。 API回应是这样的:Python - 从数据框提取信息(JSON)

{ 
    "res": 0, 
    "res_message": "OK", 
    "visits_timeseries" : [ 
     { 
      "id":"api.stats.visits_timeseries.human", 
      "name":"Human visits", 
      "data":[ 
       [1344247200000,50], 
       [1344247500000,40], 
       ... 
      ] 
     }, 
     { 
      "id":"api.stats.visits_timeseries.bot", 
      "name":"Bot visits", 
      "data":[ 
       [1344247200000,10], 
       [1344247500000,20], 
       ... 
      ] 
     } 

我恢复Visit_timeseries数据是这样的:

r = requests.post('https://my.incapsula.com/api/stats/v1', params=payload) 
reply=r.json() 
reply = reply['visits_timeseries'] 
reply = pandas.DataFrame(reply) 

我以这样的形式恢复数据(在UNIX时间日期,数量访问):

print(reply[['name', 'data']].head()) 

name            data 
0 Human visits [[1500163200000, 39], [1499904000000, 73], [14... 
1 Bot visits [[1500163200000, 1891], [1499904000000, 1926],... 

我不知道如何从数据框中提取我想要的字段,以便只将它们写入到excel中。我需要将数据字段修改为两行(日期,值)。并且只将名称作为顶行。

什么是伟大的是:

 Human Visit  Bot Visit 
Date  Value   Value 
Date  Value   Value 
Date  Value   Value 

感谢您的帮助!

回答

1

好吧,如果这是任何帮助,这是一个硬编码的版本:

import pandas as pd 

reply = { 
    "res": 0, 
    "res_message": "OK", 
    "visits_timeseries" : [ 
     { 
      "id":"api.stats.visits_timeseries.human", 
      "name":"Human visits", 
      "data":[ 
       [1344247200000,50], 
       [1344247500000,40] 
      ] 
     }, 
     { 
      "id":"api.stats.visits_timeseries.bot", 
      "name":"Bot visits", 
      "data":[ 
       [1344247200000,10], 
       [1344247500000,20] 
      ] 
     } 
     ] 
     } 

human_data = reply['visits_timeseries'][0]['data'] 
bot_data = reply['visits_timeseries'][1]['data'] 

df_h = pd.DataFrame(human_data, columns=['Date', 'Human Visit']) 
df_b = pd.DataFrame(bot_data, columns=['Date', 'Bot Visit']) 
df = df_h.append(df_b, ignore_index=True).fillna(0) 
df = df.groupby('Date').sum()