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

使用Pandas格式化SurveyMonkey非规范问卷数据的技术问询

处理SurveyMonkey问卷数据的宽表转长表问题

我太懂这种烦恼了——SurveyMonkey导出的数据总爱把同一个问题的不同选项拆成单独列,导致数据零散又难分析。别慌,用pandas几步就能把乱糟糟的宽表改成清晰的单列式结构,方便后续分析。

第一步:规整目标问题的列名

首先得把属于同一个问题的列统一梳理清楚。比如你提到的参与时长问题,原列名是How long have you been participating in the Garden Awards Program?,后面跟着的Unnamed:10、Unnamed:11其实是该问题的选项(One year、2-3 years等)。先给这些列重命名,让逻辑更清晰:

import pandas as pd

# 假设数据已经加载到DataFrame里
df = pd.read_csv("your_survey_data.csv")

# 定位目标问题的所有列
target_cols = [
    "How long have you been participating in the Garden Awards Program?",
    "Unnamed: 10",
    "Unnamed: 11",
    "Unnamed: 12"
]

# 对应的选项名称
option_labels = [
    "One year",
    "2-3 years",
    "4-5 years",
    "5 or more years"
]

# 重命名列
df.rename(columns=dict(zip(target_cols, option_labels)), inplace=True)

第二步:把分散列合并成单列

接下来用pandas的方法把这些分散的选项列合并成一列,提取每个用户的有效选择:

# 方法1:用bfill提取每行的非空值
df["Program Participation Duration"] = df[option_labels].bfill(axis=1).iloc[:, 0]

# 方法2:用stack重塑数据(更通用)
duration_series = df[option_labels].stack().reset_index(level=1, drop=True)
df["Program Participation Duration"] = duration_series

# 最后删掉原来的分散列
df.drop(option_labels, axis=1, inplace=True)

第三步:验证结果

处理完后,你会看到新的Program Participation Duration列里,每行都是用户对应的实际选择(比如One year、4-5 years),再也没有零散的NaN列捣乱了。如果问卷里还有很多这类结构的问题,把上面的逻辑改成循环就能批量处理,效率拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:17:33