如何将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
相关产品推荐
相关产品推荐

