Как сжать два списка кортежей по строкам? - PullRequest
0 голосов
/ 22 января 2019

У меня есть два списка примерно так:

list1 = [{'id':'1','id2':'2'},{'id':'2','id2':'3'}]
list2 = [{'fname':'a','lname':'b'},{'fname':'c','lname':'d'}]

Как мне объединить списки в один набор кортежей для фрейма данных pandas?

вроде так:

final_list = [{'id':'1','id2':'2','fname':'a','lname':'b'},{'id':'2','id2':'3','fname':'c','lname':'d'}]

датафрейм должен выглядеть следующим образом:

id     id2      fname     lname
1       2         a          b
2       3         c          d 

пробовал это до сих пор:

final_list = list(zip(list1,list2))

df = pd.DataFrame(final_list)

df:

0                          1
[{nested_data}]          [{nested_data}]

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Вы должны сделать pd.concat .

Согласно документации, ответ @jpp лучше с точки зрения производительности. Я был бы более склонен верить эталону, но, честно говоря, я доверяю документации панд .

import pandas as pd

df = pd.DataFrame(list1)
df2 = pd.DataFrame(list2)

result_df = pd.concat([df, df2], axis=1)

#result_df
#  id id2 fname lname
#0  1   2     a     b
#1  2   3     c     d
0 голосов
/ 22 января 2019

«Чистый» ответ Python (т.е. без панд):

[{**x[0], **x[1]} for x in zip(list1, list2)]

> [{'id': '1', 'id2': '2', 'fname': 'a', 'lname': 'b'},
    {'id': '2', 'id2': '3', 'fname': 'c', 'lname': 'd'}]

Под редакцией Скотта Бостона

pd.DataFrame([{**x[0], **x[1]} for x in zip(list1, list2)])

Вывод:

  fname id id2 lname
0     a  1   2     b
1     c  2   3     d
0 голосов
/ 22 января 2019

Вы можете просто использовать pd.DataFrame.join:

df = pd.DataFrame(list1).join(pd.DataFrame(list2))

print(df)

  id id2 fname lname
0  1   2     a     b
1  2   3     c     d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...