Python、Pandas Dataframes和InfluxDB
作者:Susannah Brodnitz / 产品,用例,入门
2022年11月9日
导航到
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时,需要记住的两个最重要的函数是pivot
和keep
。Pivot
将数据格式更改为列。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视频。