python - 如何将多个字典中的数据合并到 DataFrame 中的一行中

标签 python pandas dictionary

我想将几个具有相同键的字典合并在一起,而不删除任何键/值对并转换为 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...

最佳答案

您可以连接每个字典的键来表示行列,然后将每个字典的值连接成一行(作为嵌套字典传递给 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)

关于python - 如何将多个字典中的数据合并到 DataFrame 中的一行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55711540/

相关文章:

python - 在启动时创建对象并跨请求共享

python - 获取给定数组值作为权重的平均(行,列)单元格?

python - 在python的unittest中,如何模拟其中包含伪造图像的伪造文件夹?

python - 根据值调整字典

python - 将 Pandas 数据框转换为字典

python - 用 tcl 编写的 irc bot 与 python/node.js 克隆相比如何?

Python pandas 数据清理

python - 在 Python Pandas 中将 GZIP 压缩应用于 CSV

python - 使用模糊匹配标准匹配多列数据

python - 如何将数据框转换为嵌套字典?