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

如何清洗含多选子列的Navigraph调查CSV数据并生成tidy格式?

处理Navigraph 2022调查数据为Tidy格式(问题-回答两列)

步骤1:数据导入与初始预处理

先解压数据文件,用pandas读取时跳过前两行(第三行起为受访者数据),注意表头包含多选子列的命名(比如Q1_OptionA、Q1_OptionB这类格式):

import pandas as pd

# 读取数据,跳过前2行,第一行作为表头
df = pd.read_csv("flightsim-community-survey-by-navigraph-2022-data.csv", skiprows=2)

步骤2:用melt()转换宽表为长表

使用melt()将所有列转为行,生成包含“原列名”和“回答内容”的临时表:

# 转换为长表,var_name存储原列名(问题标识),value_name存储回答
melted_df = df.melt(id_vars=[], var_name="问题标识", value_name="回答")

步骤3:处理多选子列,提取统一问题名

针对带后缀的多选子列(如Q2_使用MSFS、Q2_使用X-Plane),通过字符串提取获取统一的问题名称,同时过滤无效回答:

# 从问题标识中提取问题主体(去掉_后的选项后缀)
melted_df["问题"] = melted_df["问题标识"].str.extract(r"(Q\d+.*?)(?=_|$)")

# 过滤无有效回答的行(根据数据实际调整,比如去掉空值或"未选择"类值)
cleaned_df = melted_df[melted_df["回答"].notna() & (melted_df["回答"] != "")]

# 最终保留问题和回答两列
final_df = cleaned_df[["问题", "回答"]].reset_index(drop=True)

补充说明

  • 单选列(无选项后缀)会直接保留原列名作为问题名,不影响结果。
  • 若多选列用布尔值/特定编码标记选中状态(比如1代表选中),需调整过滤条件为melted_df["回答"] == 1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:25:23