我有一个两层字典,看起来像这样:
myDict = {'a':{'2017-01-01':4.1, '2017-01-02':10.8}, 'b':{'2017-01-01':6.2, '2017-01-03':8.5}}
我希望将这些数据存储为一个拥有以下设计的数据框:
- 那些在一个列中存在但在另一个列中不存在的日期会在数据框中变成np.nan - 这很好,因为如果需要,我可以使用后向填充函数。
- 所有日期的并集成为索引,索引类型为pd.DatetimeIndex - 这很好,因为我可以轻松地对数据框进行时间操作。
数据框:
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'
I.e.,
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)使用第二步中的字典来创建 pandas 数据帧。
然而,我发现这种方法存在一些低效之处,涉及太多对字典的循环和可能不必要的数据复制。
欢迎任何建议。
orient='columns'
是默认设置,因此有时您甚至不需要猜测! - jpp