将字典的 dict 转换为 Pandas DataFrame

Dna*_*iel 3 python dictionary dataframe pandas

我有一个看起来像这样的两级字典:

myDict = {'a':{'2017-01-01':4.1, '2017-01-02':10.8}, 'b':{'2017-01-01':6.2, '2017-01-03':8.5}}
Run Code Online (Sandbox Code Playgroud)

我想将其存储为具有以下设计的数据框:

  • 数据存在于一列而不是另一列的日期成为数据框中的 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'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我面临的问题当然是我事先不知道哪些日期构成了最终索引(所有日期的联合),而且我也不知道逐列添加数据的最佳方法是什么。

我想到的伪代码:

(1) 遍历字典级别 1 中所有键的所有日期,然后取所有日期的并集。这成为我的索引。

(2) 然后创建一个新的字典,其中只有原始键和值与 (1) 中的索引顺序相同,以及找不到值的 np.nan

(3)使用(2)中的字典创建pandas数据框

但是,我发现这种方法存在一些效率低下的问题,因为字典中的循环过多,并且复制数据的频率高于可能需要的频率。

欢迎任何建议。

cs9*_*s95 6

丢弃你的伪代码(对不起!),因为大熊猫用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
Run Code Online (Sandbox Code Playgroud)

棘手的一点是找出正确的方向来通过......这与经验有关。

快速说明,.rename_axis('Date')如果您想用名称“日期”标记索引,您可以在最后添加一个调用。

  • 注意 `orient='columns'` 是默认值,所以有时你甚至不需要猜测! (4认同)