0

我对多个文件进行了循环以获得每个文件的 OrderedDict(可能有不同的键,这意味着从 OrderedDict 到另一个不同)。我想将结果写入/打包到同一个熊猫数据框中。所以我们将所有不同的键作为列名,数据框的每一行都代表一个 OrderedDict。

我的结果看起来像这样:

OrderedDict([('mrz_type', 'ID'), ('valid_score', 70), ('valid_composite', False), ('type', 'ID'), ('country', ''), ('number', ''), ('date_of_birth', '840927'), ('sex', 'F'), ('nom', ), ('prenom', ''), ('dep', ''), ('service', '1'), ('office', '056'), ('check_number', '7'), ('check_date_of_birth', '4'), ('check_composite', '9'), ('valid_number', True), ('valid_date_of_birth', True)])

OrderedDict([('mrz_type', 'PASP'), ('valid_score', 62), ('valid_composite', False), ('type', 'P'), ('country', ''), ('number', ''), ('date_of_birth', '550912'), ('expiration_date', '200801'), ('nationality', ''), ('sex', 'M'), ('nom', ''), ('prenom', ''), ('check_number', '2'), ('check_date_of_birth', '9'), ('check_expiration_date', '1'), ('check_composite', '8'), ('valid_number', True), ('valid_date_of_birth', False), ('valid_expiration_date', True)])

OrderedDict([('mrz_type', 'IR'), ('valid_score', 28), ('valid_composite', False), ('type', 'IR'), ('country', ''), ('number', ''), ('date_of_birth', '750612'), ('expiration_date', '010119'), ('nationality', ''), ('sex', 'Z'), ('nom', ''), ('prenom', ''), ('num_etrg', ''), ('check_number', '6'), ('check_date_of_birth', '1'), ('check_expiration_date', ''), ('check_composite', ''), ('valid_number', False), ('valid_date_of_birth', True), ('valid_expiration_date', False)])
4

1 回答 1

1

按照您提供的 3 个 OrderedDict 示例注意,您提供的第一个 OrderedDict 有一个单元素元组 ('nom', ),我将其更改为 ('nom',' ')。

以下 4 个步骤来达到预期的结果:

list_of_ordered_dicts = [od1,od2,od3]

# flat all items for dicts together in a list
all_items =[item for dict_items in list_of_ordered_dicts
                     for item in dict_items.items() ]

# create a set with all columns 
all_columns = set(dict(all_items).keys())

# update ordered dicts with new columns, setting missing columns values to None
for ordered_dict in list_of_ordered_dicts:
    missing_columns = all_columns - set(ordered_dict.keys())
    for column in missing_columns:
        ordered_dict.setdefault(column, None)

# create dataframe
df = pd.DataFrame(list_of_ordered_dicts, columns=all_columns)
于 2019-07-16T16:49:30.280 回答