如何将含元组键的字典转为以键为索引的多行DataFrame?
问题解决:将元组为键的字典转为多行DataFrame
问题背景
我有一个以元组为键的字典,结构如下:
{('CMS', 'LNT'): 0.8500276624334894, ('LNT', 'CMS'): 0.8500276624334894, ('LOW', 'HD'): 0.8502400376842035, ('HD', 'LOW'): 0.8502400376842036, ('SWKS', 'QRVO'): 0.8507993847326996, ('QRVO', 'SWKS'): 0.8507993847326996, ('WFC', 'BAC'): 0.8510581675586776, .....
原本用以下代码转换为DataFrame(abc为字典名称):
data_results_1y = pd.DataFrame.from_records(abc, index=[0]) data_results_1y
得到的是多列单行的结构:
(AAL, DAL) (AAL, UAL) (AEE, CMS) (AEE, LNT) (AEE, WEC) (AEP, XEL) 0 0.873762 0.898774 0.859258 0.853194 0.8679 0.851787
需要生成多行结构,让元组键作为DataFrame的索引,预期输出如下:
(AAL, DAL) 0.873762 (AAL, UAL) 0.898774 (AEE, CMS) 0.859258 (AEE, LNT) 0.853194 (AEE, WEC) 0.8679 (AEP, XEL) 0.851787
解决方案
方法1:用from_dict指定orient='index'
这是最简洁的实现方式,直接将字典的键作为索引,值作为列数据:
import pandas as pd data_results_1y = pd.DataFrame.from_dict(abc, orient='index', columns=['Value'])
方法2:传入字典的items()构造DataFrame
先将字典的键值对转为列表,再构造DataFrame后设置索引:
data_results_1y = pd.DataFrame(abc.items(), columns=['Pair', 'Value']) data_results_1y = data_results_1y.set_index('Pair')
方法3:通过Series中转
先将字典转为Pandas Series(自动以元组为索引),再转为DataFrame:
data_series = pd.Series(abc) data_results_1y = data_series.to_frame(name='Value')
输出示例
执行上述任意方法后,会得到符合预期的结构:
Value (AAL, DAL) 0.873762 (AAL, UAL) 0.898774 (AEE, CMS) 0.859258 (AEE, LNT) 0.853194 (AEE, WEC) 0.867900 (AEP, XEL) 0.851787
内容的提问来源于stack exchange,提问作者Niko
相关产品推荐
相关产品推荐

