You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Pandas读取Excel到字典时保留同键多值及替代方案咨询

解决Pandas读取Excel时保留重复键对应多行数据的问题

嘿,我完全懂你的需求——你想把Excel里的数据以Col1为键转成字典,但普通字典的键是唯一的,所以你之前的代码会把第二个A的条目覆盖掉第一个,对吧?别急,咱们一步步来解决这个问题,还会结合你后续建模的需求给出最优建议。

为什么你的代码会丢失数据?

Python的字典不允许重复键,当你用set_index('Col1')然后to_dict(orient='index')时,第二个A会直接替换掉第一个,这就是数据丢失的核心原因。

方案1:用「字典套列表」的结构保留所有数据

这是最实用的方案,每个键对应一个列表,列表里是该行的字典。这样既符合字典的规则,又能完整保留所有行数据:

import pandas as pd

# 读取Excel文件
df = pd.read_excel('Data.xlsx')

# 按Col1分组,将每组转成字典列表,再生成最终字典
result = df.groupby('Col1').apply(lambda x: x.drop('Col1', axis=1).to_dict('records')).to_dict()

print(result)

输出结果:

{
    'A': [{'Col2': 1, 'Col3': 2, 'Col4': 3}, {'Col2': 4, 'Col3': 5, 'Col4': 6}],
    'B': [{'Col2': 7, 'Col3': 8, 'Col4': 9}]
}

这个结构非常适合后续处理:比如你要分析A对应的Col2影响,直接通过result['A']就能拿到所有相关行的数据,遍历列表即可对每一行做建模分析。

方案2:直接用Pandas DataFrame进行分析(更推荐)

其实你后续要做的建模分析,完全不需要转成字典——Pandas的DataFrame本身就是为数据处理和分析设计的,效率比字典高得多。比如:

import pandas as pd

df = pd.read_excel('Data.xlsx')

# 按Col1分组,直接对分组数据操作
grouped = df.groupby('Col1')

# 示例:查看每个分组的Col2统计信息
print(grouped['Col2'].describe())

# 示例:对每个分组单独构建模型
for group_name, group_data in grouped:
    print(f"\n处理分组 {group_name}:")
    # 这里可以针对group_data(比如A的两行数据)做建模
    print(group_data)

用DataFrame的话,你可以直接调用Pandas的各种分析函数,甚至结合scikit-learn等建模库,比字典操作更便捷。

如果你非要类似「重复键字典」的格式

注意:Python原生字典不支持重复键,所以只能用列表来存储每个键值对条目:

import pandas as pd

df = pd.read_excel('Data.xlsx')

result_list = []
for _, row in df.iterrows():
    # 每行生成一个单独的字典,加入列表
    result_list.append({row['Col1']: row.drop('Col1').to_dict()})

print(result_list)

输出结果:

[{'A': {'Col2': 1, 'Col3': 2, 'Col4': 3}}, {'A': {'Col2': 4, 'Col3': 5, 'Col4': 6}}, {'B': {'Col2': 7, 'Col3': 8, 'Col4': 9}}]

不过这个结构在后续处理时需要遍历列表,不如方案1的字典套列表高效,所以更推荐方案1或直接用DataFrame。

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

火山引擎 最新活动