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

从两个pandas DataFrame生成Python字典,代码仅首行生效如何解决

问题解决方法

出错原因

  1. 直接遍历DataFrame对象image_files时,默认返回的是列名而非行内容,你的数据集只有1列,所以原循环只会执行1次,只会处理第一行数据。
  2. file.iterrows()返回的是(行索引, 行Series对象)的元组,原代码直接将整个元组转数组,会把索引也计入结果,不符合标注数据要求。
  3. 额外提示:Python原生字典不支持重复键,你预期输出里的重复键结构无法用普通字典实现,后续写入会覆盖之前的同键值对。

修复代码

方案1:同一路径的标注合并为嵌套列表(推荐,符合字典规范)

import pandas as pd
import numpy as np

# 读取无表头的csv需加header=None,避免第一行数据被识别为列名
image_files = pd.read_csv('image_files.csv', header=None)
file = pd.read_csv('Training_dataset.csv', header=None)

image_anno_dict = {}

for img_tuple, (_, anno_row) in zip(image_files.itertuples(index=False, name=None), file.iterrows()):
    img_path = img_tuple[0]
    anno_list = anno_row.tolist()
    if img_path in image_anno_dict:
        image_anno_dict[img_path].append(anno_list)
    else:
        image_anno_dict[img_path] = [anno_list]

输出格式示例:

{
    'C:/Users/.../000005.jpg': [[324,339,263,211,9], [253,372,165,264,9], ...],
    'C:/Users/.../000007.jpg': [...],
    ...
}

方案2:保留重复键结构(用元组列表实现,无法用普通字典)

如果一定要保留你预期的多组同键结构,可以用列表存储键值对元组:

import pandas as pd
import numpy as np

image_files = pd.read_csv('image_files.csv', header=None)
file = pd.read_csv('Training_dataset.csv', header=None)

image_anno_list = []
for img_tuple, (_, anno_row) in zip(image_files.itertuples(index=False, name=None), file.iterrows()):
    img_path = img_tuple[0]
    anno_list = anno_row.tolist()
    image_anno_list.append((img_path, anno_list))

输出格式示例:

[
    ('C:/Users/.../000005.jpg', [324,339,263,211,9]),
    ('C:/Users/.../000005.jpg', [253,372,165,264,9]),
    ...
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:18:02