首页 > 解决方案 > 使用 json_normalize 从 opentsdb 导入时间序列

问题描述

尝试使用 json_normalize 从 OpenTSDB 导入数据。不知何故,它适用于大多数领域,除了每个时间戳的值。

我尝试更改不同的设置,甚至更改.T我在此处某处得到的时间序列的末尾。虽然,这并没有帮助。

import pandas as pd
from pandas.io.json import json_normalize

data = {
    "metric": "peer.traffic.in",
    "tags": {"site": "site1", "peer": "peer1"},
    "aggregateTags": [],
    "dps": {"1561953835": 19565.66015625, "1561954125": 19012.55078125, "1561954439": 17274.669921875, "1561954728": 19151.75, "1561955039": 17603.23046875, "1561955329": 17056.1796875, "1561955641": 16232.349609375, "1561955928": 17016.48046875, "1561956241": 16023.0498046875, "1561956533": 15529.1298828125, "1561956847": 14976.080078125, "1561957126": 14557.6796875}
}

df = json_normalize(data, record_path=['dps'], meta=['metric',['tags','site'],['tags','peer']])
print (df)

输出 :

             0           metric tags:site tags:peer
0   1561953835  peer.traffic.in     site1     peer1
1   1561954125  peer.traffic.in     site1     peer1
2   1561954439  peer.traffic.in     site1     peer1
3   1561954728  peer.traffic.in     site1     peer1
4   1561955039  peer.traffic.in     site1     peer1
5   1561955329  peer.traffic.in     site1     peer1
6   1561955641  peer.traffic.in     site1     peer1
7   1561955928  peer.traffic.in     site1     peer1
8   1561956241  peer.traffic.in     site1     peer1
9   1561956533  peer.traffic.in     site1     peer1
10  1561956847  peer.traffic.in     site1     peer1
11  1561957126  peer.traffic.in     site1     peer1

我希望从表格中看到值显示在dps表格中。

标签: jsonpandastime-seriesnormalize

解决方案


根据json_normalize record_path 无法将字典作为输入处理。您需要提供正确的数据格式:

import pandas as pd
from pandas.io.json import json_normalize

data = {
    "metric": "peer.traffic.in",
    "tags": {"site": "site1", "peer": "peer1"},
    "aggregateTags": [],
    "dps": {"1561953835": 19565.66015625, "1561954125": 19012.55078125, "1561954439": 17274.669921875, "1561954728": 19151.75, "1561955039": 17603.23046875, "1561955329": 17056.1796875, "1561955641": 16232.349609375, "1561955928": 17016.48046875, "1561956241": 16023.0498046875, "1561956533": 15529.1298828125, "1561956847": 14976.080078125, "1561957126": 14557.6796875}
}

# convert dict values into list
data['dps'] = [str(i) for i in list(data.get('dps').values())]


df = json_normalize(data=data, record_path='dps', meta=['metric',['tags','site'],['tags','peer']])

输出:

                   0           metric tags.site tags.peer
0     19565.66015625  peer.traffic.in     site1     peer1
1     19012.55078125  peer.traffic.in     site1     peer1
2    17274.669921875  peer.traffic.in     site1     peer1
3           19151.75  peer.traffic.in     site1     peer1
4     17603.23046875  peer.traffic.in     site1     peer1
5      17056.1796875  peer.traffic.in     site1     peer1
6    16232.349609375  peer.traffic.in     site1     peer1
7     17016.48046875  peer.traffic.in     site1     peer1
8   16023.0498046875  peer.traffic.in     site1     peer1
9   15529.1298828125  peer.traffic.in     site1     peer1
10   14976.080078125  peer.traffic.in     site1     peer1
11     14557.6796875  peer.traffic.in     site1     peer1

推荐阅读