Я хочу объединить несколько словарей с одинаковыми ключами, не удаляя пар ключ/значение, и преобразовать их в DataFrame
.
Я пробовал dict.update()
, но он заменяет прежние значения новыми для дубликатов ключей.
dict3[1]
{'DB': 'M',
'TITLE': 'ACM Journal of Computer Documentation ',
'ISSN': '1527-6805',
'e-ISSN': '1557-9441',
'ISBN': nan,
'e-ISBN': nan}
dict4[0]
{'DB': 'D',
'TITLE': 'ACM Computing Surveys ',
'ISSN': '0360-0300',
'e-ISSN': '1557-7341',
'ISBN': nan,
'e-ISBN': nan}
Я хотел бы, чтобы результат содержал все ключи в одной строке независимо от того, являются ли значения одинаковыми или разными, хотя они являются перекрывающимися ключами. Таблица должна выглядеть следующим образом:
DB TITLE ISSN e-ISSN ... DB TITLE ISSN ...
0 M ACM Journal... 1527-6805 1557-9441 ... D ACM Comput... 0360-0300...
Вы можете объединить ключи каждого dict для представления столбцов строк, а затем объединить значения каждого dict в одну строку (передаваемую в конструктор DataFrame
как вложенный диктат для создания строки, а не одного столбца). Например:
import pandas as pd
nan = float('nan')
d1 = {'DB': 'M', 'TITLE': 'ACM Journal of Computer Documentation', 'ISSN': '1527-6805', 'e-ISSN': '1557-9441', 'ISBN': nan, 'e-ISBN': nan}
d2 = {'DB': 'D', 'TITLE': 'ACM Computing Surveys', 'ISSN': '0360-0300', 'e-ISSN': '1557-7341', 'ISBN': nan, 'e-ISBN': nan}
columns = [*d1.keys(), *d2.keys()]
row = [*d1.values(), *d2.values()]
df = pd.DataFrame([row], columns=columns)
print(df)
# DB TITLE ... DB TITLE
# 0 M ACM Journal of Computer Documentation ... D ACM Computing Surveys
Вы можете создать простую функцию для преобразования произвольного числа диктовок в один ряд DataFrame
используя тот же базовый подход. Например:
def dicts_to_single_row_df(*args):
columns = [k for d in args for k in d.keys()]
row = [v for d in args for v in d.values()]
return pd.DataFrame([row], columns=columns)
df = dicts_to_single_row_df(d1, d2)
DataFrame
из разных групп диктов? Если да, будет ли в каждой строке одинаковое количество столбцов?
collections.ChainMap
.