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

如何将DataFrame转换为字典实现按ID查询对应5条图片描述

现有代码问题说明
  • 重复打印全量记录:你用的df['Description'].where()方法会返回和原数据集长度一致的序列,匹配失败的位置填充为NaN,不会只返回匹配到的单条结果,所以每次循环都会打印全部16万行的内容,不匹配的行显示NaN
  • 短ID查询报错:大概率是精确匹配时输入ID不存在对应记录,或者拼接后无匹配项导致的输出异常
方案1:优化pandas代码(无需转字典,改动量最小)

不需要循环查询5次,直接用前缀匹配一次性筛选出对应ID的所有描述即可,代码如下:

import pandas as pd
df = pd.read_csv('results.txt', delimiter="\t")
input_id = input('Enter the ID: ').strip()
# 筛选所有Image_ID以输入ID加.jpg#开头的记录
match_result = df[df['Image_ID'].str.startswith(f"{input_id}.jpg#")]['Description']

if len(match_result) > 0:
    for i, desc in enumerate(match_result, 1):
        print(f"描述{i}:{desc}")
else:
    print("未找到对应ID的描述,请检查输入是否正确")
方案2:转换为字典实现(查询效率更高,适合频繁查询场景)

先明确字典的核心逻辑:字典是键(key):值(value)的映射结构,我们这里把基础ID作为唯一key,把该ID对应的5条描述组成的列表作为value,查询时只需输入key就能直接取出对应的所有描述,查询速度远高于pandas遍历筛选。
转换+查询代码如下:

import pandas as pd
df = pd.read_csv('results.txt', delimiter="\t")
# 提取每条记录的基础ID(即Image_ID中.jpg#前面的部分)
df['base_id'] = df['Image_ID'].str.split('.jpg#').str[0]
# 按基础ID分组,把同个ID的所有描述拼成列表,转换为字典
id_desc_dict = df.groupby('base_id')['Description'].apply(list).to_dict()

# 查询逻辑
input_id = input('Enter the ID: ').strip()
if input_id in id_desc_dict:
    for i, desc in enumerate(id_desc_dict[input_id], 1):
        print(f"描述{i}:{desc}")
else:
    print("未找到对应ID的描述,请检查输入是否正确")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 00:54:06