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

Python处理CSV问卷结果 按唯一问题分组输出对应答案

核心实现思路

实现该需求的核心是以问题ID作为唯一分组依据,不要直接按问题文本分组——示例中美食类问题的文本存在拼写误差(favoirte为笔误),如果直接按文本去重会将同一问题拆分为多个分组,这也是多数人编写逻辑时容易踩的坑。
整体实现仅需3步:

  • 逐行读取CSV内容,将每行拆分为问题ID、问题文本、回答内容三个字段
  • 以字典结构存储分组数据:键为问题ID,值存储两个信息:对应展示用的问题文本、归属该问题的所有回答列表
  • 遍历分组结果,先输出问题文本,再逐行输出对应回答,按要求保留空行对齐格式即可。

方案1:使用Python内置csv模块实现

该方案无需安装第三方依赖,适合中小体量的问卷文件,Python3.7+版本的字典默认保留插入顺序,输出顺序和问题在CSV中第一次出现的顺序完全一致:

import csv
from collections import defaultdict

# 初始化分组容器
question_groups = defaultdict(lambda: {"show_text": "", "answers": []})

with open("你的问卷文件路径.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        # 跳过CSV中自带的空行
        if not row:
            continue
        q_id = row[0].strip()
        q_text = row[1].strip()
        answer = row[2].strip()
        
        # 第一次读取到该问题ID时,记录展示用的问题文本
        if not question_groups[q_id]["show_text"]:
            # 如需修正文本笔误,可在这里针对指定q_id手动赋值文本,比如q_id=="24"时强制赋值为正确的问题文本
            question_groups[q_id]["show_text"] = q_text
        # 将回答追加到对应问题的回答列表中
        question_groups[q_id]["answers"].append(answer)

# 按要求格式打印输出
for group in question_groups.values():
    print(group["show_text"])
    print()
    for ans in group["answers"]:
        print(ans)
        print()

方案2:使用pandas实现

如果问卷数据体量较大(十万行级以上),用pandas做分组聚合的效率更高:

import pandas as pd

# 读取CSV,手动指定列名,跳过空行
df = pd.read_csv(
    "你的问卷文件路径.csv",
    header=None,
    names=["q_id", "q_text", "answer"],
    skip_blank_lines=True,
    encoding="utf-8"
)

# 按问题ID分组,同ID下取第一条出现的文本作为展示文本,聚合所有回答
grouped_result = df.groupby("q_id", as_index=False).agg(
    show_text=("q_text", "first"),
    answer_list=("answer", list)
)

# 按格式输出
for _, row in grouped_result.iterrows():
    print(row["show_text"])
    print()
    for ans in row["answer_list"]:
        print(ans)
        print()

注意事项
  • 不要用问题文本作为分组键:实际导出的问卷CSV经常存在同题文本多打空格、拼写错误、特殊字符不一致的问题,问题ID是系统生成的唯一标识,用ID分组不会出现同题被拆分的问题。
  • 如果需要自定义问题输出顺序,可以额外维护一个问题ID的顺序列表,遍历的时候按列表顺序取对应分组即可。
  • 读取CSV时注意指定和文件匹配的编码格式,避免出现中文乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:45:36