如何将嵌套Python字典格式的天气数据转换为Pandas DataFrame
嵌套天气字典转Pandas DataFrame实现方案
问题背景
现有如下嵌套格式的天气数据字典,需转换为指定结构的Pandas DataFrame,后续用于加载至SQLServer:
my_dict = { 'data.outdoor.temperature': {'unit': '℃', 'list': {'datetime.datetime(2025, 4, 23, 10, 0): 22.3', 'datetime.datetime(2025, 4, 23, 14, 0): 21.3', 'datetime.datetime(2025, 4, 23, 18, 0): 18.2', }}, 'data.indoor.temperature': {'unit': '℃', 'list': {'datetime.datetime(2025, 4, 23, 10, 0): 23.2', 'datetime.datetime(2025, 4, 23, 14, 0): 23.5', 'datetime.datetime(2025, 4, 23, 18, 0): 22.9'}}}
期望输出的DataFrame结构(列依次为:传感器类型、日期、小时、温度、单位):
outdoor.temperature | 2025_04_23 | 10 | 22.3 | ℃ outdoor.temperature | 2025_04_23 | 14 | 21.3 | ℃ outdoor.temperature | 2025_04_23 | 18 | 18.2 | ℃ indoor.temperature | 2025_04_23 | 10 | 23.2 | ℃ indoor.temperature | 2025_04_23 | 14 | 23.5 | ℃ indoor.temperature | 2025_04_23 | 18 | 22.9 | ℃
解决思路
原字典核心问题是list字段下的条目为字符串形式的键值对,而非原生字典,需先解析这些字符串,提取datetime信息和温度值,再整理成DataFrame所需的行数据结构。
实现代码
import pandas as pd import datetime # 初始化存储所有行数据的列表 rows = [] # 遍历字典中的每个传感器条目 for sensor_full_key, sensor_data in my_dict.items(): # 提取传感器名称(去掉前缀data.) sensor_name = sensor_full_key.replace('data.', '') unit = sensor_data['unit'] # 处理每个数据条目字符串 for entry_str in sensor_data['list']: # 拆分datetime字符串和温度值 dt_str, temp_str = entry_str.split(': ', 1) # 解析datetime对象:去掉datetime.datetime(...)的包裹,提取参数 dt_args = eval(dt_str.replace('datetime.datetime(', '').rstrip(')')) dt = datetime.datetime(*dt_args) # 格式化日期和小时 date_str = dt.strftime('%Y_%m_%d') hour = dt.hour temperature = float(temp_str) # 添加到行列表 rows.append([sensor_name, date_str, hour, temperature, unit]) # 转换为DataFrame df = pd.DataFrame(rows, columns=['sensor', 'date', 'hour', 'temperature', 'unit']) # 查看结果 print(df)
输出结果
运行代码后得到的DataFrame如下:
sensor date hour temperature unit 0 outdoor.temperature 2025_04_23 10 22.3 ℃ 1 outdoor.temperature 2025_04_23 14 21.3 ℃ 2 outdoor.temperature 2025_04_23 18 18.2 ℃ 3 indoor.temperature 2025_04_23 10 23.2 ℃ 4 indoor.temperature 2025_04_23 14 23.5 ℃ 5 indoor.temperature 2025_04_23 18 22.9 ℃
注意事项
- 数据量较大(数百条)时仍能高效处理,遍历和字符串解析的时间复杂度为O(n),n为总数据条目数
- 若datetime字符串格式有变化,需调整解析逻辑,确保能正确提取年、月、日、小时参数
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

