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

如何用for循环构建嵌套字典存储DataFrame?问题排查与解决

解决嵌套字典存储DataFrame的问题

问题1:正确初始化嵌套字典

有两种可靠方式初始化符合要求的嵌套字典结构:

方式1:手动预初始化所有层级

先明确所有需要处理的速度和测量点,逐层构建字典:

velocities = ['C2', 'C5']
spots = [-45.0, -50.0]

# 初始化三层嵌套字典
data_dict = {}
for vel in velocities:
    data_dict[vel] = {}
    for spot in spots:
        data_dict[vel][spot] = {}

方式2:用collections.defaultdict自动生成层级

如果不想提前定义所有组合,用defaultdict可以自动创建缺失的层级,避免KeyError:

from collections import defaultdict

# 定义嵌套结构:velocity -> spot -> {time: df}
data_dict = defaultdict(lambda: defaultdict(dict))

问题2:遍历所有速度和测量点组合

要覆盖所有速度与测量点的组合,需遍历两者的笛卡尔积,以下是完整实现代码:

import os
import pandas as pd
from collections import defaultdict

# 定义所有待处理的速度和测量点
velocities = ['C2', 'C5']
spots = [-45.0, -50.0]
base_dir = 'data'

# 初始化嵌套字典
data_dict = defaultdict(lambda: defaultdict(dict))

# 遍历所有速度-测量点组合
for vel in velocities:
    for spot in spots:
        # 构建当前测量点的目录路径
        spot_dir = os.path.join(base_dir, vel, f'spot_{spot}')
        if not os.path.exists(spot_dir):
            continue  # 目录不存在则跳过
        
        # 遍历目录下的数据文件(假设文件名包含创建时间,如20240520_1430.csv)
        for filename in os.listdir(spot_dir):
            if filename.endswith('.csv'):
                # 从文件名提取创建时间(需根据实际格式调整)
                time_of_creation = filename.split('.')[0]
                # 读取DataFrame
                df = pd.read_csv(os.path.join(spot_dir, filename))
                # 存入嵌套字典对应位置
                data_dict[vel][spot][time_of_creation] = df

# 可选:转换为普通字典(若不需要defaultdict特性)
data_dict = dict(data_dict)

关键说明

  • 嵌套循环遍历velocities和spots的所有组合,确保C5、-50.0这类条目被处理
  • 用os.path.join构建跨平台路径,避免手动拼接路径的错误
  • 提取创建时间的逻辑需根据实际文件名格式调整,示例假设文件名为「时间戳.csv」形式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:45:29