You need to enable JavaScript to run this app. Python字典转pandas DataFrame:键为folders列、文件展开为files列
优惠活动
大模型
产品
解决方案
定价
更多

Python字典转pandas DataFrame:键为folders列、文件展开为files列

字典转目标结构DataFrame的实现方法

针对给定的「文件夹名: 对应文件列表」字典,要生成每个文件夹和单个文件一一对应成行的扁平DataFrame,实际用的时候有几种常用实现:

方法1:逐元素遍历拼接列数据

这是最直白的基础写法,逻辑完全透明,新手也能一眼看懂每一步在做什么,不需要依赖特殊的pandas API:

import pandas as pd

from_this_dict_ = {"folder1": ["file1", "file2"], "folder2": ["file3"] }

# 初始化两个列表,分别存两列的最终取值
folder_values = []
file_values = []
for folder_name, file_list in from_this_dict_.items():
    # 遍历当前文件夹下的所有文件,逐对匹配文件夹和文件的对应关系
    for single_file in file_list:
        folder_values.append(folder_name)
        file_values.append(single_file)

# 用构造好的列数据生成最终DataFrame
to_this_dataframe = pd.DataFrame({
    "folders": folder_values,
    "files": file_values
})

方法2:结合explode做列扁平化

这是pandas生态下最简洁高效的写法,核心思路是先把字典转成临时结构——每个文件夹占一行,对应的整个文件列表存在同一行的files列里,再用pandas原生的explode接口把列表列拆成独立行。这种写法处理大字典的时候性能远好于手动循环,是生产环境最常用的方案:

import pandas as pd

from_this_dict_ = {"folder1": ["file1", "file2"], "folder2": ["file3"] }

# 构造临时的单行对应结构
temp_df = pd.DataFrame(
    from_this_dict_.items(),
    columns=["folders", "files"]
)
# 展开files列里的列表,重置行索引后就得到和目标完全一致的结构
to_this_dataframe = temp_df.explode("files", ignore_index=True)

小提示:如果某个文件夹下的文件列表是空的,explode默认会把对应的文件夹行直接过滤掉;如果需要保留这类空文件夹的占位行,只要在explode之后对空值做自定义填充就可以。

方法3:列表推导式一次性构造行数据

这是第一种手动循环写法的精简版,通过嵌套列表推导直接生成所有行的元组,不需要手动维护空列表,快速写临时脚本的时候用起来很顺手:

import pandas as pd

from_this_dict_ = {"folder1": ["file1", "file2"], "folder2": ["file3"] }

# 一次性生成所有(文件夹名, 单个文件)格式的行元组
all_rows = [
    (folder_name, single_file)
    for folder_name, file_list in from_this_dict_.items()
    for single_file in file_list
]

to_this_dataframe = pd.DataFrame(all_rows, columns=["folders", "files"])

这几种写法生成的结果和要求的目标DataFrame结构完全一致,完全可以根据场景选:刚接触pandas可以选第一种写法练手理解逻辑,生产环境处理大体积字典推荐用explode的方法,写临时快速验证的脚本可以用第三种精简写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 06:06:11