如何优化Pandas实现Excel表格转值为列表的嵌套字典?
高效实现DataFrame转嵌套字典的方法
问题描述
我用parse命令读取了一个多列的大型表格,想要把第一列(Company)和第二列(Product)作为嵌套键对,其余列的值存储为列表。我已经写了一段能实现需求的代码,但想知道有没有更高效的实现方式。
我的实现代码
import pandas as pd # 数据框来自Excel表格,用df.parse读取 df = pd.DataFrame({ "Company": ["TechCorp", "Innovate Inc", "Green Solutions", "Future Dynamics"], "Product": ["TC100", "IN200", "GS300", "FD400"], "Production Cost": [10000, 15000, 12000, 18000], "Development Time": [6, 9, 8, 12], "Launch Year": [2023, 2024, 2023, 2025] }) nested_dict = {} for index, row in df.iterrows(): fleet = row['Company'] engine = row['Product'] values = row[['Production Cost', 'Development Time', 'Launch Year']].tolist() if fleet not in nested_dict: nested_dict[fleet] = {} nested_dict[fleet][engine] = values return nested_dict
目标结构
{'TechCorp': {'TC100': [10000, 6, 2023]}, 'Innovate Inc': {'IN200': [15000, 9, 2024]}, 'Green Solutions': {'GS300': [12000, 8, 2023]}, 'Future Dynamics': {'FD400': [18000, 12, 2025]}}
更高效的实现方案
你的代码逻辑没问题,但iterrows()在处理大型DataFrame时效率偏低,因为它是逐行遍历的。可以用pandas的原生向量化操作替代,大幅提升处理速度。
方案1:GroupBy + 字典推导
利用groupby按Company分组,每组内将Product映射为对应的值列表:
import pandas as pd df = pd.DataFrame({ "Company": ["TechCorp", "Innovate Inc", "Green Solutions", "Future Dynamics"], "Product": ["TC100", "IN200", "GS300", "FD400"], "Production Cost": [10000, 15000, 12000, 18000], "Development Time": [6, 9, 8, 12], "Launch Year": [2023, 2024, 2023, 2025] }) nested_dict = { company: group.set_index('Product')[['Production Cost', 'Development Time', 'Launch Year']].apply(list, axis=1).to_dict() for company, group in df.groupby('Company') }
方案2:Set Index + Stack + To Dict(最简洁高效)
通过设置双索引,直接将剩余列转为列表后构建嵌套字典,代码更简洁,执行效率更高:
nested_dict = df.set_index(['Company', 'Product']).apply(list, axis=1).unstack().to_dict('index')
这两种方案都避免了逐行迭代,依托pandas内部优化处理数据,在大型表格上的性能远优于iterrows()。
内容的提问来源于stack exchange,提问作者whitepanda
相关产品推荐
相关产品推荐

