Python、Pandas Dataframes和InfluxDB

导航到

InfluxDB拥有超过12个客户端库,以便开发者可以更轻松地开始使用,并使用他们最熟悉的语言编程。我们最受欢迎的选项之一是Python客户端库。InfluxDB不仅支持Python,还支持pandas,这是一个数据科学家用于分析和操作数据的流行工具。您可以使用客户端库将InfluxDB中的数据输出到pandas可以接受的DataFrame格式,您还可以将pandas DataFrame直接写入InfluxDB。这使得将InfluxDB集成到您的数据科学应用中并利用实时监控和警报变得简单。

从InfluxDB查询数据到Pandas Dataframe

要在InfluxDB中查询并返回一个pandas DataFrame,您首先需要安装Python客户端库。要设置它,您需要将库下载到您的Python项目中并设置您的凭证,包括您的URL、令牌以及您想要发送数据到和读取数据的存储桶名称。一旦您设置了凭证,您就可以查询数据。

以下是一个示例查询

query= ‘’’
from (bucket: “system”)
|> range(start: -5m, stop: now())
|> filter(fn: (r) => r._measurement = “cpu”)
|> pivot(rowKey: [“_time”], ColumnKey: [“tag”], ValueColumn: “value”)
|> keep(columns: [“_time”, “usage_user”, “cpu”])
‘’’
client = InfluxDBClient(url, token, org, debug = false)
system_stats = client.query.api().query_data_frame()
display(system_stats.head())

此查询是用InfluxDB的脚本和查询语言Flux编写的。它请求从“system”存储桶过去五分钟内的数据,并按“cpu”度量进行筛选。当您使用InfluxDB和pandas时,需要记住的两个最重要的函数是pivotkeepPivot将数据格式更改为列。Pandas DataFrame是二维表,因此Pandas函数和工具期望数据以该格式存在,您需要将查询自InfluxDB获取的数据进行转换。 Keep告诉查询在列中保留哪些数据,并删除输出pandas DataFrame中不希望包含的任何其他列。

在编写完查询后,您需要使用凭证调用InfluxDB客户端,并使用query_data_frame()函数通过查询API获取DataFrame格式。然后您可以使用.head在pandas DataFrame中显示数据。

将Pandas Dataframe中的数据写入InfluxDB

您还可以将来自pandas DataFrame的数据写入InfluxDB。以下是一些示例代码

system_stats.drop(columns = [‘result’, ‘table’, ‘start’, ‘stop’])
system_stats.set_index(“_time”)
_write_client.write(bucket.name, record = system_stats)

您使用pandas DataFrame中的drop函数删除的任何数据在将数据写入InfluxDB时都将成为一个字段。在此示例查询中,我们删除了不希望作为字段发送到InfluxDB的列,因为我们想将它们作为标签。您还需要设置索引,这将是InfluxDB中的时间戳。然后您需要使用Python客户端库的write函数将数据写入InfluxDB。它接受一个存储桶名称和您想要写入该存储桶的记录。您还需要为客户端设置凭证,如第一个示例中所述。

需要考虑的一个问题是时间戳。Pandas自带日期时间格式。您可以使用该格式,或者使用以下时间格式之一

“2018-10-26”, “2018-10-26 12:00”,或 “2018-10-26 12:00:00-05:00”

Flux是一种强大的分析语言,但您可能希望使用pandas,因为它在Python社区中非常受欢迎。它拥有很多支持,而且很多人已经熟悉它,并习惯于使用DataFrame。将pandas与InfluxDB Python客户端库结合使用,可以让您轻松地将InfluxDB集成到您的应用程序中,以获得专为时序数据库设计的优势。

要了解更多关于使用pandas DataFrame与InfluxDB的信息,您可以观看我们关于这个主题的Meet the Developer视频