pandas执行drop删除列时报错KeyError: ['robbinsville'] not found in axis
问题原因
你提供的CSV文件中town字段的取值全部被单引号包裹,pandas默认使用双引号作为字段包裹标识,读取时不会自动移除这些单引号,因此town列的实际值是带单引号的字符串(如'robbinsville'而非robbinsville)。调用pd.get_dummies生成独热列时,列名会直接复用这些带单引号的值,你尝试删除无单引号的robbinsville自然会触发列不存在的报错。
验证方法
执行以下代码打印合并后的表的全部列名,即可看到独热列的实际名称:
print(merged.columns.tolist())
解决方法
方法一(推荐):读取CSV时清理多余符号
修改CSV读取逻辑,指定单引号为字段包裹符,同时自动跳过字段前的多余空格,读取后town字段的单引号会被自动移除:
import pandas as pd # 新增quotechar和skipinitialspace参数 df = pd.read_csv("testfile2.csv", quotechar="'", skipinitialspace=True) df.columns = df.columns.str.strip() df = df.loc[:, ~df.columns.str.contains('^Unnamed')] dummies = pd.get_dummies(df.town) merged = pd.concat([df, dummies], axis='columns') # 此时可以正常删除无单引号的robbinsville列 final = merged.drop(['town', 'robbinsville'], axis='columns') print(final)
方法二:直接匹配实际列名删除
如果不修改读取逻辑,删除时直接使用带单引号的列名即可:
final = merged.drop(['town', "'robbinsville'"], axis='columns')
内容的提问来源于stack exchange,提问作者user13800925
相关产品推荐
相关产品推荐

