【发布时间】:2019-04-25 02:16:06
【问题描述】:
非常感谢您的帮助。
我从 influx db 获得了这个结果集。它实际上是一本字典:
{u'current': [[0.03341725795376516, u'2018-10-10T12:41:27Z']], u'voltage': [[12.95246814679179, u'2018-10-10T12:41:27Z']], u'temperature': [[0.035324635690852216, u'2018-10-10T12:41:27Z']], u'tags': {u'product': u'00000000000000'}}
另一个例子是:
u'data': {
u'measurement': u'telemetry'},
u'tags': {u'product_imei': u'000000000000000'},
u'current': [
[1.234, u'2016-01-01T00:00:00Z'], [2.234, u'2016-01-01T04:00:00Z'], [3.234, u'2016-01-01T08:00:00Z'], [1.234, u'2016-01-01T12:00:00Z'], [2.345, u'2016-01-01T16:00:00Z'], [2.678, u'2016-01-01T20:00:00Z'], [2.91, u'2016-01-02T00:00:00Z'], [2.345, u'2016-01-02T04:00:00Z'], [2.678, u'2016-01-02T08:00:00Z'], [2.91, u'2016-01-02T12:00:00Z'], [2.345, u'2016-01-02T16:00:00Z'], [2.678, u'2016-01-02T20:00:00Z'], [2.91, u'2016-01-03T00:00:00Z']
],
u'voltage': [
[14.243, u'2016-01-01T00:00:00Z'], [14.723, u'2016-01-01T04:00:00Z'], [14.826, u'2016-01-01T08:00:00Z'], [13.284, u'2016-01-01T12:00:00Z'], [12.345, u'2016-01-01T16:00:00Z'], [12.678, u'2016-01-01T20:00:00Z'], [12.91, u'2016-01-02T00:00:00Z'], [12.345, u'2016-01-02T04:00:00Z'], [12.678, u'2016-01-02T08:00:00Z'], [12.91, u'2016-01-02T12:00:00Z'], [12.345, u'2016-01-02T16:00:00Z'], [12.678, u'2016-01-02T20:00:00Z'], [12.91, u'2016-01-03T00:00:00Z']
],
u'temperature': [
[21.345, u'2016-01-01T00:00:00Z'], [None, u'2016-01-01T04:00:00Z'], [21.345, u'2016-01-01T08:00:00Z'], [None, u'2016-01-01T12:00:00Z'], [21.345, u'2016-01-01T16:00:00Z'], [None, u'2016-01-01T20:00:00Z'], [21.91, u'2016-01-02T00:00:00Z'], [None, u'2016-01-02T04:00:00Z'], [21.678, u'2016-01-02T08:00:00Z'], [None, u'2016-01-02T12:00:00Z'], [21.345, u'2016-01-02T16:00:00Z'], [None, u'2016-01-02T20:00:00Z'], [21.91, u'2016-01-03T00:00:00Z']
]
}
我想使用 python 有一个与此类似的 pandas DataFrame:
time current product voltage temperature
------------------------------------------------------------------
2016-01-01 00:00:00 1.234 000000000000000 14.243 21.345
2016-01-01 04:00:00 2.234 000000000000000 14.723
2016-01-01 08:00:00 3.234 000000000000000 14.826 21.345
2016-01-01 12:00:00 1.234 000000000000000 13.284
2016-01-01 16:00:00 2.345 000000000000000 12.345 21.345
2016-01-01 20:00:00 2.678 000000000000000 12.678
2016-01-02 00:00:00 2.910 000000000000000 12.910 21.910
2016-01-02 04:00:00 2.345 000000000000000 12.345
2016-01-02 08:00:00 2.678 000000000000000 12.678 21.678
2016-01-02 12:00:00 2.910 000000000000000 12.910
2016-01-02 16:00:00 2.345 000000000000000 12.345 21.345
2016-01-02 20:00:00 2.678 000000000000000 12.678
2016-01-03 00:00:00 2.910 000000000000000 12.910 21.910
我已经尝试过一种非常低效的方法,实际上是逐行写入。太多时间。我花了很长时间为数千个单位做这个。
for i, line in enumerate(results['voltage']):
aux_dict = {}
for key in results.keys():
try:
results[key]
aux_dict[key] = results[key][i][0]
aux_dict['time'] = pd.to_datetime(line[1], infer_datetime_format=True)
output.append(aux_dict)
except:
"Column '" + key + "' does not have data."
continue
df = pd.DataFrame(output)
提前感谢您的帮助。
【问题讨论】:
-
您可以将您的字典转换为数据框,但它应该是文字字典,您可以显示您的字典吗?
-
您好,谢谢您的回答。字典在第一个代码块中。问题是,例如对于当前,它作为字典“当前”中的键是这样的:[[current1,datetime1],[current2,datetime2],...]。然后电压相同:'电压':[[电压1,日期时间1],[电压2,日期时间2],...]等。谢谢你的回答。
-
问题是如何获得共享日期时间的统一数据框。请注意,温度每 8 小时记录一次。
标签: python pandas dataframe influxdb