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

如何遍历pandas DataFrame列表生成对应命名字典并转换问卷响应?

问卷编码转换解决方案

一、遍历生成目标字典列表

完全可以实现,步骤如下:

  1. 先把所有问题对应的DataFrame放进一个列表:
# 把Q1到Q14的DataFrame依次存入列表
question_dfs = [Q1_df, Q2_df, Q3_df, Q4_df, Q5_df, Q6_df, Q7_df, Q8_df, Q9_df, Q10_df, Q11_df, Q12_df, Q13_df, Q14_df]
  1. 用列表推导式批量生成字典列表:
# 每个DataFrame转成Key:Value格式的字典,结果存在dict_list里
dict_list = [df.set_index('Key')['Value'].to_dict() for df in question_dfs]

此时dict_list[0]就是Q1对应的字典,dict_list[1]对应Q2,以此类推。如果一定要单独生成Q1_dict、Q2_dict这类变量,可以用循环批量赋值:

# 批量创建Q1_dict到Q14_dict变量
for idx, mapping_dict in enumerate(dict_list, start=1):
    globals()[f'Q{idx}_dict'] = mapping_dict

二、更简便的处理方案(推荐)

没必要单独拆分Qn_df或创建Qn_dict,直接批量处理更高效:

方案1:从原始编码定义表直接生成所有映射字典

如果你的编码定义表包含「问题编号(如Q1)、Key、Value」三列,直接按问题分组生成全局映射字典:

# 假设编码定义表为code_definitions,列名是Question、Key、Value
all_mappings = code_definitions.groupby('Question').apply(
    lambda group: group.set_index('Key')['Value'].to_dict()
).to_dict()

生成的all_mappings是一个嵌套字典,结构为{'Q1': {1:'编码1定义'}, 'Q2': {2:'编码2定义'}, ...},之后直接批量转换问卷响应表:

# 假设问卷响应表为responses,列名对应Q1到Q14
for col in responses.columns:
    responses[col] = responses[col].map(all_mappings[col])

方案2:基于已拆分的Qn_df批量转换

如果已经拆分好了Q1_df到Q14_df,直接循环对应列转换:

# 确保question_dfs的顺序和responses的列顺序一致
for col, df in zip(responses.columns, question_dfs):
    mapping = df.set_index('Key')['Value'].to_dict()
    responses[col] = responses[col].map(mapping)

注意事项

  • 尽量避免单独创建Q1_dict这类零散变量,用列表或字典统一管理映射关系,代码更整洁且易维护。
  • 如果编码中存在缺失值(NaN),可以用map的替代方法replace,或者加上fillna保留原始值:responses[col] = responses[col].map(mapping).fillna(responses[col])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:33:20