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

如何解析Excel单单元格ERP表单响应生成结构化pandas DataFrame

import pandas as pd

# 辅助函数:将单条反馈字符串转为问答字典,同时返回当前行的问题顺序
def parse_response(resp_str):
    # 按--分割问答对,过滤空值并去除首尾空白符
    qa_pairs = [p.strip() for p in resp_str.split("--") if p.strip()]
    qa_dict = {}
    question_order = []
    for pair in qa_pairs:
        # 仅按第一个冒号分割,避免答案包含冒号时拆分错误
        q, a = pair.split(":", 1)
        clean_q = q.strip()
        qa_dict[clean_q] = a.strip()
        question_order.append(clean_q)
    return qa_dict, question_order

# ---------------------- 第一步:生成固定顺序的表头 ----------------------
# 存储每个问题出现的最小索引,保证同位置的动态问题排在一起
question_min_idx = {}
for resp in raw_df["Form response in one cell"]:
    _, q_order = parse_response(resp)
    for idx, q in enumerate(q_order):
        # 仅记录问题首次出现的最小位置
        if q not in question_min_idx or idx < question_min_idx[q]:
            question_min_idx[q] = idx

# 按最小索引从小到大排序,保证顺序符合填写逻辑:地区→对应国家问题→通用问题
all_questions = sorted(question_min_idx.keys(), key=lambda x: question_min_idx[x])
final_columns = ["PO", "Vendor"] + all_questions

# ---------------------- 第二步:生成结果表 ----------------------
result_rows = []
for _, row in raw_df.iterrows():
    # 基础字段
    row_data = {"PO": row["PO"], "Vendor": row["Vendor"]}
    # 合并当前行的问答数据
    qa_dict, _ = parse_response(row["Form response in one cell"])
    row_data.update(qa_dict)
    result_rows.append(row_data)

# 生成DataFrame时指定列顺序,无答案的字段自动填充为空
result_df = pd.DataFrame(result_rows, columns=final_columns)

# 导出Excel
result_df.to_excel("ERP表单反馈整理结果.xlsx", index=False)

功能说明

1. 字符串转字典实现

解决你原来嵌套列表的问题,直接返回可直接查询的问答字典,同时做了边界兼容:分割冒号时只拆分第一个出现的冒号,避免答案本身包含冒号时拆分错误,所有字段自动去除首尾空白字符。

2. 去重且保留问题顺序实现

通过记录每个问题首次出现的最小索引,排序后生成的表头完全符合填写逻辑:同一位置出现的动态问题(比如不同地区对应的国家问题)会排在对应位置,不会追加到通用问题后面,完全满足你要求的「地区→对应国家→通用问题」的顺序要求。

3. 数据填充逻辑

不需要手动遍历单元格赋值,直接合并每行的基础信息和问答字典,pandas自动对齐列,无答案的问题自动填充为空值。

Python风格优化建议

  • 遍历可迭代对象直接遍历元素即可,不需要额外声明counter计数器,避免冗余代码
  • 简单逻辑优先用列表推导式实现,代码更简洁易读
  • 处理字符串分割时优先考虑边界场景,指定分割次数避免内容包含分隔符时出错
  • 优先用Python原生的字典、列表和pandas内置方法处理数据,比手动循环单元格执行效率高很多,也不容易出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:15:03