Pandas influxdb 线路协议的 datetime64 到纪元

Pandas datetime64 to epoch for influxdb line protocol

我正在尝试将一些数据从 CSV 转换为 InfluxDB 行协议。

首先,我正在使用的数据集如下所示:

date time latency
2021-02-02 16:11:15,486 78
2021-02-02 16:16:15,592 94

我想以这样的方式结束:

some_category latency=78 1612369423.956387

到目前为止,我已经得到了以下代码,但我正在努力解决如何按照线路协议的要求将日期时间对象导出为纪元时间。我对这里的 pandas 文档有点困惑。

import pandas as pd

df = pd.read_csv("processed.csv",
                 delim_whitespace=True,
                 # Treat columns 0 and 1 as a single datetime object.
                 parse_dates=[[0, 1]])

lines = ['some_category'
        + ' '
        + 'latency=' + df['latency'].apply(str)
        + ' '
        + df['date_time'].apply(str)]

据我了解,问题中指定的带有小数点的最终时间戳格式实际上并不是您想要的。如果你想遵循 influxdb line 协议(参考 influxdb docs),纪元时间应该是一个整数,表示在 ns.

中的时间

假设读取csv文件时使用默认的date_parser,要将datetime对象转换成纪元时间,你应该执行对象转换int如下:

lines = ['some_category'
        + ' '
        + 'latency=' + df['latency'].apply(str)
        + ' '
        + df['date_time'].astype(int).apply(str)]

之后列表“”的内容应该如下所示:

some_category latency=78 1612282275486000000
some_category latency=94 1612282575592000000

现在如果我们想看看这是否有效,我们可以形成 influxdb 行协议导出文件 test_db.db 可以被 Influx CLI 消化 内容如下:

# INFLUXDB EXPORT: 1677-09-21T01:06:11+00:53 - 2262-04-12T00:47:16+01:00
# DDL
CREATE DATABASE test_db WITH NAME autogen
# DML
# CONTEXT-DATABASE:test_db
# CONTEXT-RETENTION-POLICY:autogen
# writing wal data
some_category latency=78 1612282275486000000
some_category latency=94 1612282575592000000

...那么让我们使用导入命令:

influx -import -path=test_db.db

&如果数据点写入正确,检查涌入实例:

use test_db
Using database test_db
precision rfc3339
select * from /.*/
name: some_category
time                     latency
----                     -------
2021-02-02T16:11:15.486Z 78
2021-02-02T16:16:15.592Z 94