Список диктов в Пандах - PullRequest
0 голосов
/ 15 мая 2018

У меня есть список диктов в следующей форме:

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

Я хочу создать панду DataFrame в следующей форме:

city name age newyork John 30 newyork John 30

Много пытался, но безуспешно

Вы можете мне помочь?

Ответы [ 5 ]

0 голосов
/ 15 мая 2018

Пришли к новому решению.Не так просто, как опубликовано здесь, но работает правильно

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)
0 голосов
/ 15 мая 2018
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
"""
0 голосов
/ 15 мая 2018
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
0 голосов
/ 15 мая 2018

Вы можете использовать:

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
0 голосов
/ 15 мая 2018

Использовать понимание списка с concat и DataFrame.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...