我有一个看起来像这样的两级字典:
myDict = {'a':{'2017-01-01':4.1, '2017-01-02':10.8}, 'b':{'2017-01-01':6.2, '2017-01-03':8.5}}
我想将其存储为具有以下设计的数据框:
数据框:
mydf = pd.DataFrame({'a':[4,10,np.nan],'b':[6.2,np.nan,8.5]}, index=pd.DatetimeIndex(['2017-01-04','2017-01-02','2017-01-03']))
mydf.index.name = 'Date'
IE。,
mydf
Out[33]:
a b
Date
2017-01-04 4.0 6.2
2017-01-02 10.0 NaN
2017-01-03 NaN 8.5
我面临的问题当然是我事先不知道哪些日期构成最终索引(所有日期的联合),而且我也不知道逐列添加数据的最佳方法是什么。
我想到的伪代码:
(1) 遍历字典级别 1 中所有键的所有日期,然后取所有日期的并集。这成为我的索引。
(2) 然后新建一个字典,里面只有原来的键和值与(1)中索引顺序相同,np.nan找不到值
(3)使用(2)中的字典创建pandas数据框
但是,我发现这种方法存在效率低下的问题,因为字典中的循环过多,并且复制数据的频率高于可能需要的频率。
欢迎任何建议。
最佳答案
删除你的伪代码(对不起!),因为 Pandas 用 pd.DataFrame.from_dict
支持你.
pd.DataFrame.from_dict(myDict, orient='columns')
a b
2017-01-01 4.1 6.2
2017-01-02 10.8 NaN
2017-01-03 NaN 8.5
棘手的一点是找出正确的方向来通过......这与经验有关。
快速说明,您可以添加
.rename_axis('Date')
如果要使用名称“Date”标记索引,请在最后调用。
关于python - 将字典的 dict 转换为 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50375422/