如何将Pandas dataframe转换为以指定列为键、属性为值列表的dict
Pandas DataFrame 转指定键值结构的实现方法
目标转换规则:将Name列的值作为字典的键,同一行的age、job列值按顺序组成列表作为对应键的值,最终输出结构为{'John': [25, 'Scientist']}。
方法1:使用Pandas内置to_dict接口
操作逻辑:把Name列设为行索引,筛选出需要作为值的两列后转置,通过to_dict('list')直接生成目标结构
import pandas as pd # 示例原始DataFrame df = pd.DataFrame({ 'Name': ['John'], 'age': [25], 'job': ['Scientist'] }) result = df.set_index('Name')[['age', 'job']].T.to_dict('list') # 运行结果:{'John': [25, 'Scientist']}
特点:代码简洁,是Pandas官方推荐的常规转换方式,处理十万行以上的大批量数据时稳定性好。
方法2:逐行遍历手动组装字典
逻辑直白,没有复杂的接口参数记忆成本,适合快速理解转换过程
result = {} for _, row in df.iterrows(): current_name = row['Name'] result[current_name] = [row['age'], row['job']]
注意:该方法逐行触发Python层级的循环,当DataFrame行数过万时运行速度会明显下降,仅适合小数据量的临时调试场景。
方法3:基于zip的向量化打包
无逐行Python循环开销,是三种方法中运行效率最高的,尤其适配超大尺寸DataFrame
name_keys = df['Name'].tolist() value_lists = map(list, zip(df['age'].tolist(), df['job'].tolist())) result = dict(zip(name_keys, value_lists))
原理:先把Name列的所有值整理为字典的键序列,再把同行的age、job值按位置打包为列表组成值序列,最后直接调用dict构造函数生成目标字典。
内容的提问来源于stack exchange,提问作者haha
相关产品推荐
相关产品推荐

