如何用Python Pandas将Excel数据转为按分类分组的字典格式?
问题与解决方案
需求说明
现有如下Excel数据:
Category Item old apple new mango old grape new ginger
需要用Python Pandas将其转换为指定格式的字典,最终目标输出有两种:
- 基础目标:
{'old': ['apple', 'grape'], 'new': ['mango', 'ginger']}
- 调整后目标:
{'Skills': {'old': ['apple', 'grape'], 'new': ['mango', 'ginger']}}
原代码及问题
使用参考代码运行后,重复分类下的内容被覆盖,仅保留最后一条数据:
原代码
import pandas as pd df = pd.read_excel("Skills.xlsx", index_col=0) df = df.where(pd.notnull(df), None) print(df.to_dict())
错误输出
{'Skills': {'old': 'grape', 'new': 'ginger'}}
修改后的代码及解释
实现调整后目标的代码
import pandas as pd # 读取Excel,不提前设置索引避免数据覆盖 df = pd.read_excel("Skills.xlsx") # 按Category分组,将同分类下的Item聚合为列表 grouped_data = df.groupby('Category')['Item'].apply(list) # 转换为嵌套字典并添加外层Skills键 result = {'Skills': grouped_data.to_dict()} print(result)
代码说明
- 读取文件时不设置
index_col=0,防止重复的Category值被覆盖; groupby('Category')['Item'].apply(list)实现将同一分类下的所有Item合并为列表;- 最后通过
to_dict()转换为字典,再在外层包裹'Skills'键,得到目标格式。
运行结果
{'Skills': {'old': ['apple', 'grape'], 'new': ['mango', 'ginger']}}
实现基础目标的代码
如果不需要外层'Skills'键,直接取分组后的字典即可:
import pandas as pd df = pd.read_excel("Skills.xlsx") grouped_data = df.groupby('Category')['Item'].apply(list) result = grouped_data.to_dict() print(result)
运行结果
{'old': ['apple', 'grape'], 'new': ['mango', 'ginger']}
内容的提问来源于stack exchange,提问作者Ramu Sompalli
相关产品推荐
相关产品推荐

