首页 > 解决方案 > 将数据框与字典合并

问题描述

我在 Python 脚本中创建了一个字典 (tax_dict),我想用它在从 csv 文件上传的数据框 (tax_cols) 中创建一个新列。

数据框和字典都有名为“Tax Head”的列。

通过 pandas 导入的来自 CSV 的 DataFrame 和我在脚本中创建的字典:

税务主管 数量
邮票 554354
海关 342425
tax_dict = {'Tax Head': ['Customs','Excise Duty','Capital Gains Tax','Stamps','Income Tax','Corporation Tax','Valued Added Tax','Training and Employment Levy','Motor Vehicle Duties','Unallocated Tax Receipts','Capital Acquisitions Tax','Local Property Tax'],
    'Tax Heads Short': ['CUST','EXD','CGT','SD','IT','CORP','VAT','TEL','MOT','UNA','CAT','LPT']}

我正在尝试使用具有较短税头的合并创建另一列:

tax_dict_pd = pd.DataFrame(data=tax_dict)
tax_cols['Tax Head Short'] = tax_cols.merge(tax_dict_pd, on='Tax Head', how='left')

我认为这条简单的线会起作用,但会不断出现错误 KeyError: 'Short' & 'ValueError: Wrong number of items passed 7, placement 意味着 1'

知道我做错了什么吗?

标签: pythonpandas

解决方案


merge返回一个数据框,通常您不能将数据框(超过 1 列)分配给一列。尝试:

tax_dict_pd = pd.DataFrame(data=tax_dict)
tax_cols['Tax Head Short'] = tax_cols.merge(tax_dict_pd, on='Tax Head', how='left')['Tax Head Short']

或使用map

tax_dict_pair = dict(**zip(tax_dict['Tax Head'], tax_dict['Tax Heads Short']))
tax_cols['Tax Head Short'] = tax_cols['Tax Head'].map(tax_dict_pair)

推荐阅读