我想将几个具有相同键的字典合并在一起,而又不删除任何键/值对并转换为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...
答案 0 :(得分:0)
您可以串联每个字典的键以表示行列,然后将每个字典的值串联到一行(作为嵌套字典传递给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)