Python - 从数据框中提取信息(JSON)

4

我是一名初学者,已经有很长一段时间没有编写任何代码了 :-) 我正在使用requests库从Incapsula(云网络安全服务)API检索JSON数据,以获取有关网站的一些统计信息。最终我想要的是将“流量类型、时间戳和数量”写入文件以创建报告。 API响应大致如下:

{
    "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个回答

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接