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
相关产品推荐
相关产品推荐

