You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyMySQL中通过DictCursor的fetchall()获取字典列数据的问题

处理PyMySQL DictCursor返回的不完整时间序列数据

看来你在使用Python 3.6.3 + PyMySQL做缺失数据插补项目时,遇到了recdate字段时间缺失的问题——比如部分记录的分钟信息丢失,像23::00这种格式。结合你提到的DictCursor返回的字典结构数据,我整理了一套具体的处理方案:

1. 先明确数据结构

首先,先把fetchall()返回的字典格式数据具象化(方便后续操作),比如你的样本数据大概是这样:

# 模拟fetchall()返回的样本数据
sample_data = [
    {"recdate": "2024-05-20 23:14:00", "outdoorhumidity": 65.2, "outdoortemperature": 22.5},
    {"recdate": "2024-05-20 23::00", "outdoorhumidity": 64.8, "outdoortemperature": 22.3},
    {"recdate": "2024-05-20 23:16:00", "outdoorhumidity": 65.0, "outdoortemperature": 22.4}
]

2. 筛选出时间不完整的记录

我们可以通过尝试解析标准时间格式来识别无效记录,代码如下:

import datetime

def is_time_invalid(time_str):
    try:
        # 尝试按标准格式解析时间
        datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
        return False
    except ValueError:
        # 解析失败说明时间格式有缺失
        return True

# 分离有效和无效时间记录
invalid_time_rows = [row for row in sample_data if is_time_invalid(row["recdate"])]
valid_time_rows = [row for row in sample_data if not is_time_invalid(row["recdate"])]

print("时间缺失的记录:", invalid_time_rows)
print("时间完整的记录:", valid_time_rows)

3. 提取不完整时间序列的相关数据

对于时间缺失的记录,我们可以把需要的字段(待补全的时间、湿度、温度)整理成便于后续插补的结构:

# 整理成(不完整时间字符串, 湿度值, 温度值)的元组列表
missing_time_dataset = [
    (row["recdate"], row["outdoorhumidity"], row["outdoortemperature"])
    for row in invalid_time_rows
]

print("待插补的缺失时间数据:", missing_time_dataset)

4. 时间缺失的补全示例(以分钟缺失为例)

如果你的缺失是分钟信息丢失(比如2024-05-20 23::00),可以基于前后有效时间的记录来推断补全,这里给一个简单的示例(实际可以根据你的时间序列规律调整逻辑):

# 示例:补全缺失的分钟信息
for idx, (bad_time, hum, temp) in enumerate(missing_time_dataset):
    # 拆分日期和时间部分
    date_segment, time_segment = bad_time.split(" ")
    hour_segment, _, sec_segment = time_segment.split(":")
    # 这里简化处理,实际可以取相邻有效记录的分钟值或按时间间隔填充
    filled_minute = 15
    # 拼接补全后的时间字符串
    fixed_time = f"{date_segment} {hour_segment}:{filled_minute}:{sec_segment}"
    # 更新原记录的时间
    invalid_time_rows[idx]["recdate"] = fixed_time

print("补全后的记录:", invalid_time_rows)

额外小技巧:动态获取字段名

如果你需要从cursor.description中动态提取字段名(而不是硬编码),可以这样做:

# 从cursor.description中提取所有字段名
field_names = [desc[0] for desc in cursor.description]
print("查询返回的字段:", field_names)  # 输出: ['recdate', 'outdoorhumidity', 'outdoortemperature']

内容的提问来源于stack exchange,提问作者OldBadger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:57:34