【问题标题】:Create Pandas DataFrame from dictionary从字典创建 Pandas DataFrame
【发布时间】:2019-02-10 22:29:13
【问题描述】:

我试图将{'a': [1, 2, 3], 'b': [4, 5]} 的字典转换为:

 0           | 1           | 
|:-----------|------------:| 
| a          |        1    |  
| a          |        2    |   
| a          |        3    |     
| b          |        4    |    
| b          |        5    |     

但是在不修改字典本身的情况下,还没有找到任何方法来实现这一点。有没有更简单的方法来做到这一点?任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: python python-3.x pandas dictionary dataframe


    【解决方案1】:

    使用pd.DataFrame.from_dict

    pd.DataFrame.from_dict(d,'index').stack().reset_index(level=0)
    Out[194]: 
      level_0    0
    0       a  1.0
    1       a  2.0
    2       a  3.0
    0       b  4.0
    1       b  5.0
    

    【讨论】:

    • Noooo,stack 再次:(
    • @jpp 我只是尝试使用 pandas 函数来回答这个问题,因为 pandas 库有 stack 。如果我们确实关心速度,我认为这里应该考虑 numba 和 cpython。
    • @Wen,别担心,我仍然认为这是一个很好的答案。但是简单是有代价的:(
    【解决方案2】:

    您可以将dict扩展为元组列表,然后转换为df,如下所示;

    ddd = {'a': [1, 2, 3], 'b': [4, 5]}
    df = pd.DataFrame([(k,v) for k in ddd for v in ddd[k]])
    

    【讨论】:

      【解决方案3】:

      您可以使用numpy.concatenatenumpy.repeat

      import numpy as np
      
      d = {'a': [1, 2, 3], 'b': [4, 5]}
      
      values = np.concatenate(list(d.values()))
      lens = list(map(len, d.values()))
      
      res = pd.DataFrame({0: np.repeat(list(d), lens),
                          1: values})
      

      结果

         0  1
      0  a  1
      1  a  2
      2  a  3
      3  b  4
      4  b  5
      

      这似乎比应有的困难,但请记住,您需要为每个系列/列创建数组。本质上,我们需要重复系列0的字典键和连接系列1的字典值。

      【讨论】:

        猜你喜欢
        • 2015-10-29
        • 1970-01-01
        • 2017-05-08
        • 2021-06-20
        • 2019-06-13
        • 2017-10-03
        • 2021-12-28
        相关资源
        最近更新 更多