使用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
相关产品推荐
相关产品推荐

