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

如何将Pandas问卷宽表转置为标准化长表以存入SQL Server数据库

宽表转标准化长表实现方案

一、Pandas 实现(推荐,适配大规模数据场景)

Pandas 内置的转换方法做了底层优化,就算后续数据增长到十万、百万行级别也能高效处理,是最适配你场景的方案。

方法1:melt 函数(官方推荐宽转长专用API)

melt 就是专门用来做宽表转长表的工具,参数配置简单直观:

import pandas as pd

# 实际使用时替换为你从Sharepoint下载得到的DataFrame即可
df = pd.DataFrame({
    'ID': [1,2,3,4],
    'Q1': [1,1,0,0],
    'Q2': [1,1,0,1],
    'QN': [0,1,1,0]
})

# 宽转长核心代码
long_df = df.melt(
    id_vars=["ID"],  # 保留不变的主键列
    var_name="Question",  # 原列名转换后存储的字段名
    value_name="Answer"  # 原单元格值转换后存储的字段名
).sort_values(by="ID").reset_index(drop=True)

# 验证输出
print(long_df)

优势:

  • 代码简洁,逻辑清晰,后续维护成本极低
  • 底层做了向量化优化,50+列、数十万行数据转换耗时也在毫秒级
  • 自动保留原数据类型,不需要额外做类型校验

方法2:stack 层级索引实现

通过设置索引后堆叠列的方式也能实现相同效果:

long_df = df.set_index("ID").stack().reset_index()
long_df.columns = ["ID", "Question", "Answer"]

二、原生Python实现(无需第三方依赖)

如果你所处环境不能安装Pandas,可使用原生Python的列表、字典实现,适合小批量数据场景:

# 样例输入,替换为你实际拿到的原始数据即可
raw_data = [
    {"ID":1, "Q1":1, "Q2":1, "QN":0},
    {"ID":2, "Q1":1, "Q2":1, "QN":1},
    {"ID":3, "Q1":0, "Q2":0, "QN":1},
    {"ID":4, "Q1":0, "Q2":1, "QN":0}
]

result = []
for row in raw_data:
    id_val = row["ID"]
    # 遍历所有非ID列,生成对应行
    for col_name in row:
        if col_name != "ID":
            result.append({
                "ID": id_val,
                "Question": col_name,
                "Answer": row[col_name]
            })

# 验证输出
for item in result:
    print(item)

如果你的原始数据是列表嵌套列表的格式(比如从文件逐行读取的结果),可调整为以下逻辑:

raw_data = [
    ["ID", "Q1", "Q2", "QN"],
    [1,1,1,0],
    [2,1,1,1],
    [3,0,0,1],
    [4,0,1,0]
]

headers = raw_data[0]
id_index = headers.index("ID")
question_cols = [col for col in headers if col != "ID"]
result = []

for row in raw_data[1:]:
    id_val = row[id_index]
    for q_col in question_cols:
        q_index = headers.index(q_col)
        result.append([id_val, q_col, row[q_index]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:15:00