在熊猫的dict dict列表

时间:2018-05-15 07:52:09

标签: python list pandas dictionary dataframe

我有以下形式的词典的列表:

[{0:{'city':'newyork', 'name':'John', 'age':'30'}}, {0:{'city':'newyork', 'name':'John', 'age':'30'}},]

我想以下列形式创建pandas DataFrame:

city name age newyork John 30 newyork John 30

尝试了很多但没有成功

你可以帮帮我吗?

5 个答案:

答案 0 :(得分:2)

将列表理解与concatDataFrame.from_dict一起使用:

L = [{0:{'city':'newyork', 'name':'John', 'age':'30'}},
 {0:{'city':'newyork', 'name':'John', 'age':'30'}}]

df = pd.concat([pd.DataFrame.from_dict(x, orient='index') for x in L])
print (df)
   name age     city
0  John  30  newyork
0  John  30  newyork

使用新列id的多个键的解决方案应为:

L = [{0:{'city':'newyork', 'name':'John', 'age':'30'}, 
      1:{'city':'newyork1', 'name':'John1', 'age':'40'}},
     {0:{'city':'newyork', 'name':'John', 'age':'30'}}]

L1 = [dict(v, id=k) for x in L for k, v in x.items()]
print (L1)
[{'name': 'John', 'age': '30', 'city': 'newyork', 'id': 0}, 
 {'name': 'John1', 'age': '40', 'city': 'newyork1', 'id': 1}, 
 {'name': 'John', 'age': '30', 'city': 'newyork', 'id': 0}]
df = pd.DataFrame(L1)
print (df)
  age      city  id   name
0  30   newyork   0   John
1  40  newyork1   1  John1
2  30   newyork   0   John

答案 1 :(得分:1)

import pandas as pd 
d = [{0:{'city':'newyork', 'name':'John', 'age':'30'}},{0:{'city':'newyork', 'name':'John', 'age':'30'}},]   
df = pd.DataFrame([list(i.values())[0] for i in d])
print(df)

<强>输出:

  age     city  name
0  30  newyork  John
1  30  newyork  John

答案 2 :(得分:1)

from pandas import DataFrame

ldata = [{0: {'city': 'newyork', 'name': 'John', 'age': '30'}},
         {0: {'city': 'newyork', 'name': 'John', 'age': '30'}}, ]

# 根据上面的ldata创建一个Dataframe
df = DataFrame(d[0] for d in ldata)
print(df)
"""
The answer is:
  age     city  name
0  30  newyork  John
1  30  newyork  John
"""

答案 3 :(得分:0)

您可以使用:

In [41]: df = pd.DataFrame(next(iter(e.values())) for e in l)

In [42]: df
Out[42]: 
  age     city  name
0  30  newyork  John
1  30  newyork  John

答案 4 :(得分:0)

来到新的解决方案。不像在这里发布的那样简单,但工作正常

L = [{0:{'city':'newyork', 'name':'John', 'age':'30'}}, {0:{'city':'newyork', 'name':'John', 'age':'30'}}] df = [L[i][0] for i in range(len(L))] df = pd.DataFrame.from_records(df)