如何将InfluxDB时序数据库返回的多表格字典转换为统一DataFrame
将InfluxDB字典转换为指定结构的DataFrame
我来帮你搞定这个数据格式转换的需求!从你描述的字典结构来看,我们可以用Python的pandas库轻松实现这个转换,核心思路是把每个KEY对应的表格数据拆分成单独的行,再统一拼接成目标格式的DataFrame。
步骤说明
假设你从InfluxDB获取的字典结构如下(我调整成更易处理的列表格式,如果你拿到的是字符串,先转成列表即可):
data_dict = { "KEY1": ["MAX", "MIN", "Date1", 100, 10, "Date2", 90, 5], "KEY2": ["MAX", "MIN", "Date1", 80, 15, "Date2", 75, 8] }
我们需要把每个KEY下的日期和对应的MAX/MIN值拆分成单独的行,最终生成包含KEYS、DATES、MAX、MIN四列的DataFrame。
完整代码实现
import pandas as pd def convert_influx_dict_to_df(data_dict): # 初始化空列表用来存储所有行数据 rows = [] for key, values in data_dict.items(): # 从索引2开始,每3个元素为一组:Date, max_val, min_val for i in range(2, len(values), 3): date = values[i] max_val = values[i+1] min_val = values[i+2] # 把当前行数据加入列表 rows.append({ "KEYS": key, "DATES": date, "MAX": max_val, "MIN": min_val }) # 把列表转换成DataFrame df = pd.DataFrame(rows) return df # 测试示例 data_dict = { "KEY1": ["MAX", "MIN", "Date1", 100, 10, "Date2", 90, 5], "KEY2": ["MAX", "MIN", "Date1", 80, 15, "Date2", 75, 8] } result_df = convert_influx_dict_to_df(data_dict) print(result_df)
输出结果
运行代码后,你会得到如下结构的DataFrame:
KEYS DATES MAX MIN 0 KEY1 Date1 100 10 1 KEY1 Date2 90 5 2 KEY2 Date1 80 15 3 KEY2 Date2 75 8
特殊情况处理
如果你的原始字典中每个KEY对应的是字符串格式的数据集(比如"MAX MIN Date1 max1 min1 Date2 max2 min2"),可以先把字符串按空格分割成列表,再做数值类型转换后传入函数:
# 处理字符串格式的value data_dict_str = { "KEY1": "MAX MIN Date1 100 10 Date2 90 5", "KEY2": "MAX MIN Date1 80 15 Date2 75 8" } # 转换为列表格式 data_dict = {k: v.split() for k, v in data_dict_str.items()} # 将max/min字符串转为数值类型 for k, v in data_dict.items(): for i in range(3, len(v), 2): v[i] = float(v[i]) v[i+1] = float(v[i+1]) # 调用转换函数 result_df = convert_influx_dict_to_df(data_dict)
这样就能完美匹配你想要的DataFrame格式啦!
内容的提问来源于stack exchange,提问作者sinemy
相关产品推荐
相关产品推荐

