繁体   English   中英

从字典列表中提取数据框并合并为一个

[英]extract dataframes from list of dictionaries and combine into one

我有一个字典列表。 列表中的每个项目都是一个字典。 每个字典都是一对键和值,值是一个数据框。

我想提取所有数据框并将它们组合成一个。

我努力了:

df = pd.DataFrame.from_dict(data)

对于完整的数据文件和列表中的每个字典。 这给出了以下错误:

ValueError: If using all scalar values, you must pass an index

我也尝试将字典变成列表,然后转换为 pd.DataFrame,我得到:

KeyError: 0

有任何想法吗?

使用pd.concat()应该是可行的。 假设您有一个字典列表l

l = ( 
    {'a': pd.DataFrame(np.arange(9).reshape((3,3)))}, 
    {'b': pd.DataFrame(np.arange(9).reshape((3,3)))}, 
    {'c': pd.DataFrame(np.arange(9).reshape((3,3)))}   
)  

您可以将列表中每个 dict 的数据帧提供给pd.concat()

df = pd.concat([[pd.DataFrame(df_) for df_ in dict_.values()][0] for dict_ in l])

在我的示例中,所有数据框的列数都相同,因此结果的形状为 9 x 3。 如果您的数据框有不同的列,则 output 将是格式错误的,并且需要额外的步骤来处理。

这应该有效。

import pandas as pd

dict1 = {'d1': pd.DataFrame({'a': [1,2,3], 'b': ['one', 'two', 'three']})}
dict2 = {'d2': pd.DataFrame({'a': [4,5,6], 'b': ['four', 'five', 'six']})}
dict3 = {'d3': pd.DataFrame({'a': [7,8,9], 'b': ['seven', 'eigth', 'nine']})}

# dicts list. you would start from here
dicts_list = [dict1, dict2, dict3]

dict_counter = 0
for _dict in dicts_list:

    aux_df = list(_dict.values())[0]
    if dict_counter == 0:
        df = aux_df
    else:
        df = df.append(aux_df)

    dict_counter += 1

# Reseting and dropping old index
df = df.reset_index(drop=True)

print(df)

只是出于好奇:为什么您的子数据框已包含在字典中? 从字典创建 dataframe 的一种简单方法是构建字典列表,然后调用pd.DataFrame(list_with_dicts) 如果所有字典中的键都相同,它应该可以工作。 只是我这边的一个建议。 像这样的东西:

list_with_dicts = [{'a': 1, 'b': 2}, {'a': 5, 'b': 4}, ...]

# my_df -> DataFrame with columns [a, b] and two rows with the values in the dict.
my_df = pd.DataFrame(list_with_dicts)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM