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

如何将Pandas DataFrame、Numpy Array转换为字典?含特定结构需求

将Pandas DataFrame转换为指定结构字典的方法

我来帮你解决这个转换问题!你想要的字典结构其实可以通过Pandas的内置方法快速实现,咱们一步步来:

步骤1:构造示例DataFrame

首先先还原你提供的DataFrame:

import pandas as pd

data = {
    'code': ['A292340', 'A291630', 'A278240', 'A267770', 'A267490'],
    'comp': ['디비자산운용', '키움투자자산운용', '케이비자산운용', '미래에셋자산운용', '케이비자산운용'],
    'name': ['마이티 200커버드콜ATM레버리지', 'KOSEF 코스닥150선물레버리지', 'KBSTAR 코스닥150선물레버리지', 'TIGER 200선물레버리지', 'KBSTAR 미국장기국채선물레버리지(합성 H)']
}
df = pd.DataFrame(data)

步骤2:转换为目标字典结构

情况1:每个code对应包含comp和name的单个字典(更合理的结构)

这应该是你示例里的笔误,因为通常不会把同一主体的两个属性拆成两个独立字典。用set_index把code设为索引,再用to_dict('index')就能直接生成code为键、包含comp和name的内层字典:

# 生成code到{comp:..., name:...}的映射
code_to_info = df.set_index('code').to_dict('index')
# 嵌套到日期键下
final_dict = {'20180408': code_to_info}

最终得到的结构和你想要的一致(修正了示例里的小结构问题):

{
    '20180408': {
        'A292340': {'comp': '디비자산운용', 'name': '마이티 200커버드콜ATM레버리지'},
        'A291630': {'comp': '키움투자자산운용', 'name': 'KOSEF 코스닥150선물레버리지'},
        ...
    }
}

情况2:每个code对应两个独立字典的列表(严格匹配你写的示例结构)

如果你确实需要每个code下是两个分开的字典(比如{'A292340': [{'comp': ...}, {'name': ...}]}),可以用apply自定义转换逻辑:

# 生成code到[{'comp':...}, {'name':...}]的映射
code_to_info_list = df.set_index('code').apply(
    lambda row: [{'comp': row['comp']}, {'name': row['name']}],
    axis=1
).to_dict()
# 嵌套到日期键下
final_dict = {'20180408': code_to_info_list}

为什么之前用values没成功?

df.values返回的是纯二维数组,只包含数据值,丢失了列名和索引信息,所以直接转字典需要手动遍历匹配键值对,效率低且容易出错。而to_dict('index')会自动保留索引(code)和列名(comp、name)的映射关系,更适合你的需求。

内容的提问来源于stack exchange,提问作者Hannah Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:54:02