【问题标题】:Python / Pandas - put a list of dicts into a Pandas DataFrame - Dict Keys schould be the columnsPython / Pandas - 将字典列表放入 Pandas DataFrame - 字典键应该是列
【发布时间】:2019-01-05 08:01:44
【问题描述】:

我有一个包含很多字典的列表。每个字典都有 5 个键/值对。

字典示例

{ 
  'name': 'Demetrius',
  'number': '0001',
  'style': 'D',
  'text': 'Demetrius an der russischen Grenze. Er ist von Kiew...',
  'year': '1797'
}

我的目标:

我的目标是具有以下顺序的 DataFrame。每个字典都在自己的行中

>>> df
number  name        year  style  text
0001    Demetrius   1805  D      Demetrius an der russischen Grenze. Er ist von Kiew...
0002

代码:

d = 文本文件的内容 - 字典列表,

book = 像示例字典一样的字典

>>>import pandas as pd

>>>df = pd.DataFrame()
>>>for book in d:
>>>    df = pd.concat([df, pd.DataFrame(list(book.items()))])

>>>print(df)

    0                  1
0   name               Demetrius
1   number             0001
2   style              D
3   text               Demetrius an der russischen Grenze. Er ist von Kiew...
4   year               1805
0   name               Der versöhnte Menschenfeind
1   number             0002
2   style              D
3   text               Der versöhnte Menschenfeind - Fragment  Gegend...
4   year               1790
...

问题:

我怎样才能直接实现 Dataframe 的样式(我的目标),或者我怎样才能改变这个现有的 df 我有我的 dict.keys 列和“数字”键中的值作为索引?

解决方案:- 感谢 jpp

>>> df = pd.DataFrame(d).set_index('number')
>>> df

         name                       style   text                                                year
number              
0001     Demetrius                      D   Demetrius an der russischen Grenze Er ist vo...     1805
0002     Der versöhnte Menschenfeind    D   Der versöhnte Menschenfeind - Fragment Gegend...    1790

【问题讨论】:

    标签: python pandas dictionary dataframe


    【解决方案1】:

    pd.DataFrame 构造函数直接接受字典列表。这将比重复附加到现有数据帧更有效。这是一个演示:

    d1 = {'name': 'Demetrius', 'number': '0001',
          'style': 'D', 'text': 'Demetrius an der...',
          'year': '1797'}
    
    d2 = {'name': 'ABC', 'number': '0002',
          'style': 'E', 'text': 'Some text',
          'year': '1850'}
    
    L = [d1, d2]
    
    df = pd.DataFrame(L)
    
    print(df)
    
            name number style                 text  year
    0  Demetrius   0001     D  Demetrius an der...  1797
    1        ABC   0002     E            Some text  1850
    

    【讨论】:

    • 谢谢!!数小时的复杂思考和尝试....但这很容易。为什么我没有在文档中找到那个简单的解决方案?没关系,我接受你的回答就像 stackoverflow 让我做的一样快。
    猜你喜欢
    • 2014-01-05
    • 2021-11-28
    • 2019-06-27
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多