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

如何将多个文本文件的词频统计字典转换为DataFrame?

把多个词频字典转换为统一列的DataFrame方法

我来帮你搞定这个问题!把对应不同文本文件的词频字典转成统一列(所有出现过的颜色)、每行对应一个文件的DataFrame其实很简单,结合示例代码给你一步步讲解,直接套用到你的50个文件上就行~

先准备示例数据

假设我们有3个对应文本文件的词频字典,模拟你的50个文件场景:

# 示例:3个文本文件的词频统计结果(颜色为键,计数为值)
file1_counts = {"红色": 5, "蓝色": 2, "绿色": 1}
file2_counts = {"蓝色": 3, "黄色": 4}
file3_counts = {"红色": 2, "绿色": 3, "紫色": 1}

方法一:分步实现(适合理解逻辑)

1. 关联文件名和对应字典

先把每个字典和它对应的文件名绑定起来,方便后续生成行索引:

# 把文件名和对应的词频字典放到一个列表里
file_data = [
    ("文件1.txt", file1_counts),
    ("文件2.txt", file2_counts),
    ("文件3.txt", file3_counts)
]

2. 提取所有唯一的颜色(作为DataFrame的列)

遍历所有字典的键,收集所有出现过的颜色并去重:

# 获取所有出现过的颜色,作为列名
all_colors = set()
for _, counts in file_data:
    all_colors.update(counts.keys())
all_colors = sorted(all_colors)  # 可选:对列名排序,让结果更整齐

3. 构建每行数据并生成DataFrame

对每个文件,遍历所有颜色,取出对应计数(没有的颜色填0),最后用pandas生成DataFrame:

import pandas as pd

# 准备每行的数据
rows = []
for filename, counts in file_data:
    # 对每个颜色,取计数,没有则返回0
    row_data = [counts.get(color, 0) for color in all_colors]
    rows.append(row_data)

# 创建DataFrame,行索引是文件名,列是所有颜色
df = pd.DataFrame(rows, index=[name for name, _ in file_data], columns=all_colors)

运行后打印df会得到这样的结果:

蓝色  绿色  红色  紫色  黄色
文件1.txt    2    1    5    0    0
文件2.txt    3    0    0    0    4
文件3.txt    0    3    2    1    0

方法二:简洁实现(适合大量文件场景)

如果你的文件数量多(比如50个),可以用更简洁的方式,直接用pd.DataFrame.from_dict来处理:

import pandas as pd

# 先把文件名和字典整理成一个大字典(键是文件名,值是词频字典)
file_dict = {
    "文件1.txt": file1_counts,
    "文件2.txt": file2_counts,
    "文件3.txt": file3_counts
}

# 直接生成DataFrame,缺失值填充为0,转成整数类型
df = pd.DataFrame.from_dict(file_dict, orient='index').fillna(0).astype(int)
# 可选:对列名排序
df = df.reindex(sorted(df.columns), axis=1)

这个方法和分步实现的结果完全一致,但代码更短,适合批量处理大量文件。

注意:如果你的词频字典是从本地文件读取的,记得先完成读取逻辑——比如每个文本文件的词频字典如果存在json文件里,就用json.load()加载;如果是自己统计生成的,就把统计后的字典和文件名关联起来即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:31:20