python - 将字典的 dict 转换为 Pandas DataFrame

标签 python pandas dictionary dataframe

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

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'
    

    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/

    相关文章:

    python - Conda - 包安装到根环境而不是事件环境

    python - 即使使用真实浏览器的 header ,网站也会阻止curl

    python - 将相同键的行组合成单个数组

    python - 将 Excel 文件中的数据转换为 Python 字典

    python - 我在下载 nltk 的 punkt tokenizer 时遇到问题

    python - 如何在 mrjob 代码中放置打印语句以进行调试?

    python - 使用函数在 pandas df 中添加一列

    python - 用后续值填充数组

    python - 根据旧字典创建新字典

    python - 从列表字典创建 n 个嵌套循环