Python - pandas 报错:ValueError: 'HIS_批准文号' is both an index level and a column label, which is ambiguous.

发布时间 2023-12-25 16:25:14作者: Himmelbleu

问题描述

file:[Terminal]
ValueError: 'HIS_批准文号' is both an index level and a column label, which is ambiguous.

ValueError: cannot insert 招采_批准文号, already exists

有这两个错误,使用函数 merge 合并的时候出现第一个错误,将两个 DataFrame 的索引 reset_index 就会出现第二个错误。

打印合并之前的两个数据帧,可以看到这 pandas 莫名其妙地把 招采_批准文号 列设置为了索引,第二个数据帧也是如此。

file:[Terminal]
                  招采_药品名称                  招采_统一编码  ... 招采_实际入库数量  招采_实际入库金额
招采_批准文号                                             ...                     
国药准字H20023231      氯化钠注射液  XB05XAL211B002010115986  ...       800     2952.0
国药准字H20023232      氯化钠注射液  XB05XAL211B002020125986  ...      1200     4668.0
国药准字H20213503    注射用头孢唑林钠  XJ01DBT103B001040230507  ...       100     4251.0
国药准字H20213504    注射用头孢唑林钠  XJ01DBT103B001050240507  ...       100     7227.0
国药准字Z65020176  养心达瓦依米西克蜜膏     ZI03AAY0103020506004  ...       600    29358.0

[5 rows x 13 columns]
                     HIS_规格       HIS_批准文号  ... HIS_入库数量 HIS_入库总金额
HIS_批准文号                                    ...                   
20051017           2ml*1支/支       20051017  ...     1800    5022.0
H20010826          5ml*1支/支      H20010826  ...      300    6630.0
H20140032       50ug*100片/盒      H20140032  ...      200    4976.0
H20140742      1.7ml*68mg/支      H20140742  ...      800    5600.0
J20180055         30mg*7片/盒      J20180055  ...     1700   39219.0
...                     ...            ...  ...      ...       ...
国药准字Z65020171    0.3g*24粒/盒  国药准字Z65020171  ...     1150   23897.0
国药准字Z65020172      35g*1盒/盒  国药准字Z65020172  ...     1840   90031.2
国药准字Z65020173      12g*6袋/盒  国药准字Z65020173  ...      800   24440.0
国药准字Z65020174      12g*6袋/盒  国药准字Z65020174  ...      600   11058.0
国药准字Z65020185    200ml*1瓶/瓶  国药准字Z65020185  ...     1040   41392.0

[274 rows x 7 columns]

解决办法

把这些索引值全部删掉,去掉之后两个数据帧的索引值就是以 0 开始逐步递增:

file:[main.py]
grouped_platform_key = '招采_批准文号'
grouped_his_key = 'HIS_批准文号'

agg_platform_data.reset_index(drop=True, inplace=True)
agg_his_data.reset_index(drop=True, inplace=True)

merged_data = pd.merge(agg_platform_data, agg_his_data, left_on=grouped_platform_key, right_on=grouped_his_key)