json - 使用 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
表格中。
解决方案
根据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
推荐阅读
- javascript - 将数据从 JSON 传递到 HTML
- powershell - Powershell:无法从主机读取和写入 Hyperv-V VM 上的变量
- python - 我无法从邮箱中发送到邮箱的邮件中获取附件
- c++ - 为什么模板析构函数不能被引用和删除?
- php - 使用 DOMXpath 后出现编码问题
- python-3.x - 在 pytest 的报告中用空格替换破折号
- python - 每小时工资的时间乘法
- react-native - 如何使用 Storybook 构建具有外部挂钩的屏幕?
- java - 编译模块Java中的更改文件
- typescript - 有什么方法可以键入注释参数必须是接口的一部分