【问题标题】:Convert dictionary to python dataframe which has key value pair将字典转换为具有键值对的python数据框
【发布时间】:2019-08-20 03:30:01
【问题描述】:

我的字典是

{'id': '6576_926_1',
'name': 'xyz',
'm': 926,

0: {'id': '2896_926_2',
 'name': 'lmn',
 'm': 926},

1: {'id': '23_926_3',
 'name': 'abc',
 'm': 928}}

我想把它转换成类似的数据框

Id  Name    M

6576_926_1  Xyz 926

2896_926_2  Lmn 926

23_926_3    Abc 928

即使第一行不可用,因为它没有索引,我也很好。大约有 1.3 百万条记录,因此速度非常重要。我尝试使用 for 循环和追加语句,它需要永远

【问题讨论】:

    标签: python pandas dataframe dictionary


    【解决方案1】:

    您可以使用循环将每个字典的条目转换为列表,然后使用熊猫的.from_dict 转换为数据框。这是给出的示例:

    >>> data = {'col_1': [3, 2, 1, 0], 'col_2': ['a', 'b', 'c', 'd']}
    >>> pd.DataFrame.from_dict(data)
       col_1 col_2
    0      3     a
    1      2     b
    2      1     c
    3      0     d
    

    【讨论】:

      【解决方案2】:

      使用以下方法

      import pandas as pd
      data = pd.Dataframe(dict)
      data = data.drop(0, axis=1)
      data = data.drop(1, axis=1)
      

      你也可以试试这个

      import pandas as pd
      
      del dict['id']
      del dict['name']
      del dict['m']
      pd.DataFrame(dict)
      

      【讨论】:

        【解决方案3】:

        试试这个代码!!尽管如此,复杂度仍然是 O(n)

        my_dict.pop('id')
        my_dict.pop('name')
        my_dict.pop('m')
        data = [ row.values() for row in my_dict.values()]
        pd.DataFrame(data=data, columns=['id','name','m'])
        

        【讨论】:

          【解决方案4】:

          正如您所提到的,第一行对您来说不是强制性的。所以,我在这里试过这个。希望这能解决你的问题

          import pandas as pd
          lis = []
          data = {
               0: {'id': '2896_926_2', 'name': 'lmn', 'm': 926},
          
               1: {'id': '23_926_3', 'name': 'abc', 'm': 928}
             }
          
          for key,val in data.iteritems():  
              lis.append(val)
          d = pd.DataFrame(lis)
          print d   
          

          输出--

                     id    m name
              0  2896_926_2  926  lmn
              1    23_926_3  928  abc
          

          如果您想 id 作为索引,请添加 set_index

          for i,j in data.iteritems():  
              lis.append(j)
          d = pd.DataFrame(lis)
          d = d.set_index('id')
          print d  
          

          输出-

                        m name
          id                  
          2896_926_2  926  lmn
          23_926_3    928  abc
          

          【讨论】:

            【解决方案5】:
            import pandas as pd
            data={'id': '6576_926_1','name': 'xyz','m': 926,0: {'id': '2896_926_2', 'name': 'lmn', 'm': 926},1: {'id': '23_926_3', 'name': 'abc','m': 928}}    
            Id=[]
            Name=[]
            M=[]
            for k,val in data.items():
                if type(val) is dict:
                    Id.append(val['id'])
                    Name.append(val['name'])
                    M.append(val['m'])
            

            df=pd.DataFrame({'Name':Name,'Id':Id,'M':M}) 打印(df)

            【讨论】:

            • 正如你提到的,我们可以忽略像 'id': '6576_926_1','name': 'xyz','m': 926 这样的数据并考虑像 - 0: {'id ':'2896_926_2','名称':'lmn','m':926}
            【解决方案6】:
            mydict = {'id': '6576_926_1',
            'name': 'xyz',
            'm': 926,
            
            0: {'id': '2896_926_2',
             'name': 'lmn',
             'm': 926},
            
            1: {'id': '23_926_3',
             'name': 'abc',
             'm': 928}}
            
            import pandas as pd
            del mydict['id']
            del mydict['name']
            del mydict['m']
            d = pd.DataFrame(mydict).T
            
            

            【讨论】:

            • 嗨 Samar Dubey,欢迎来到 stackoverflow,良好的代码响应。一个方便的提示,关于您的答案的一些解释将使您的帖子更有价值和被赞成。 =)
            • 感谢@JackDev 的提示。下次我会记住这一点:)
            • 请不要使用dict作为变量名。 dict 是创建字典的保留关键字。通过使用 dict 作为变量名,您正在到处创建错误。
            • 你是绝对正确的,我已经编辑了我的回复。谢谢
            猜你喜欢
            • 2013-12-05
            • 2023-03-16
            • 1970-01-01
            • 1970-01-01
            • 2020-01-18
            • 2016-12-28
            • 2023-01-13
            • 2019-02-11
            • 1970-01-01
            相关资源
            最近更新 更多