【问题标题】:Pandas dataFrame creation熊猫数据框创建
【发布时间】:2017-12-13 00:54:57
【问题描述】:

我想用下面这个字典创建一个熊猫数据框

     a ={('p','l',2):3,('p','l',3):4,('p','l1',5):4,('p','l',5):4,
      ('p','l',6):2,('p','l2',6):4,('p','l1',2):5}

              m n o p
            o p l 2 3
            1 p l 3 4
            2 p l1 5 4
            3 p l 6 2

我写了以下逻辑 df = pd.DataFrame(a,columns=['m','n','o','p']) 但它不起作用,你能帮帮我吗

提前致谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    Bu 使用 numpy

    pd.DataFrame(np.append(np.array(list(a.keys())),np.array(list(a.values()))[:,None],1),columns=list('abcd'))
    Out[1151]: 
       a   b  c  d
    0  p   l  2  3
    1  p   l  3  4
    2  p  l1  5  4
    3  p   l  5  4
    4  p   l  6  2
    5  p  l2  6  4
    6  p  l1  2  5
    

    【讨论】:

      【解决方案2】:

      这是另一种选择 -

      df = pd.DataFrame(list(a.keys()), columns=list('mno'))
      df['p'] = list(a.values())
      
      df
      
         m   n  o  p
      0  p  l2  6  4
      1  p   l  6  2
      2  p   l  3  4
      3  p   l  5  4
      4  p  l1  2  5
      5  p  l1  5  4
      6  p   l  2  3
      

      编辑)取回一个字典帖子groupby:如果你想要p的结果,然后在p上调用mean,然后是to_dict -

      df.groupby(['m', 'n']).p.mean().to_dict()
      {('p', 'l'): 3.25, ('p', 'l1'): 4.5, ('p', 'l2'): 4.0}
      

      【讨论】:

      • 好兄弟:-)
      • @Wen 感谢一如既往的支持!希望也能看到你的一些答案:)
      • 我很难跳出你和 Jez 的框框思考 :-)
      • 嗨,兄弟,在按列 m 和 n 执行分组并执行平均后,我如何将其转换回我的字典
      • 终于找到新方法了.. :-)
      【解决方案3】:

      Series 构造函数与reset_index 一起使用:

      df = pd.Series(a).reset_index()
      df.columns=['m','n','o','p']
      print (df)
         m   n  o  p
      0  p   l  2  3
      1  p   l  3  4
      2  p   l  5  4
      3  p   l  6  2
      4  p  l1  2  5
      5  p  l1  5  4
      6  p  l2  6  4
      

      或者先使用list comprehension 嵌套lists:

      a = [list(k) + [v] for k,v in a.items()]
      df = pd.DataFrame(a,columns=['m','n','o','p']) 
      print (df)
         m   n  o  p
      0  p   l  2  3
      1  p   l  5  4
      2  p  l2  6  4
      3  p  l1  2  5
      4  p   l  3  4
      5  p   l  6  2
      6  p  l1  5  4
      

      【讨论】:

      • 我喜欢这两种解决方案 :-)
      【解决方案4】:

      让我们通过pd.MultiIndex 和Pandas 0.21.0 你可以使用set_axis

      idx = pd.MultiIndex.from_tuples(a.keys())
      df_out = pd.DataFrame(data=list(a.values()), index=idx).reset_index()\
                 .set_axis(['m','n','o','p'], axis=1, inplace=False)
      df_out
      

      输出:

         m   n  o  p
      0  p   l  2  3
      1  p  l1  2  5
      2  p   l  6  2
      3  p  l2  6  4
      4  p   l  3  4
      5  p  l1  5  4
      6  p   l  5  4
      

      【讨论】:

        猜你喜欢
        • 2022-01-13
        • 1970-01-01
        • 2021-06-02
        • 2014-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-24
        相关资源
        最近更新 更多