Pandas删除plan_benefits列遇KeyError,求有效解决方法
解决转置后无法删除"plan_benefits"的问题
嘿,我来帮你搞定这个困扰!你遇到的KeyError完全是因为对转置后的DataFrame结构理解有点偏差,咱们一步步理清楚:
问题根源
你执行df_repo[['plan_benefits', 'valid_flag']].set_index('plan_benefits').transpose()之后,原来的plan_benefits列已经不是一个普通列了——它变成了DataFrame的行索引名称(可以通过df_repo.index.name查看,值就是plan_benefits)。所以你用drop或者del去删除列的时候,自然找不到这个键,报错是必然的。
两种解决方案
方案一:在现有代码基础上快速修正
在你添加完plan_name和pdf_name列之后,只需要两行代码就能达到你的期望:
# 移除行索引的名称(也就是那个显示在最左侧的"plan_benefits") df_repo.index.name = None # 把行索引重置为默认的数字索引(比如0) df_repo = df_repo.reset_index(drop=True)
完整修改后的代码:
# 你的原有操作 df_repo = df_repo[['plan_benefits', 'valid_flag']].set_index('plan_benefits').transpose() df_repo['plan_name'] = 'ABCBCBC' df_repo['pdf_name'] = 'adjnajdn.pdf' # 新增的修正步骤 df_repo.index.name = None df_repo = df_repo.reset_index(drop=True) print(df_repo.to_string())
方案二:调整初始转置逻辑,从源头避免问题
如果你想从一开始就避免这个索引名称的困扰,可以换一种转置方式:
# 先提取需要的列并转置 df_repo = df_repo[['plan_benefits', 'valid_flag']].transpose() # 用plan_benefits那一行的内容作为列名 df_repo.columns = df_repo.loc['plan_benefits'] # 删除plan_benefits这一行 df_repo = df_repo.drop('plan_benefits') # 添加自定义列 df_repo['plan_name'] = 'ABCBCBC' df_repo['pdf_name'] = 'adjnajdn.pdf' # 重置索引为默认数字 df_repo = df_repo.reset_index(drop=True) print(df_repo.to_string())
最终效果
两种方案执行后,打印出来的结果都会和你期望的完全一致:
durable_medical_equipment pcp specialist diagnostic imaging generic formulary_brand non_preferred_generic emergency_room inpatient_facility medical_deductible_single medical_deductible_family maximum_out_of_pocket_limit_single maximum_out_of_pocket_limit_family plan_name pdf_name 0 False False False False False False False False False False False False False False ABCBCBC adjnajdn.pdf
内容的提问来源于stack exchange,提问作者user1896796
相关产品推荐
相关产品推荐

