如何解决pandas中get_dummies()的KeyError错误?
解决pandas.get_dummies()报KeyError:列中不存在'Car'的问题
问题描述
我尝试将分类数据转换为数值型,使用了以下代码:
import pandas as pd cars = pd.read_csv("caterogical data.csv") ohe_cars = pd.get_dummies(cars[['Car']]) print(ohe_cars.to_string())
整理数据后仍报错,错误信息如下:
Traceback (most recent call last): PS C:\Users\BAGAS Laptop> & "C:/Users/BAGAS Laptop/AppData/Local/Programs/Python/Python311/python.exe" "e:/BELAJAR CODING/Belajar coding2023/.vscode/python machine learning6" Traceback (most recent call last): File "e:\BELAJAR CODING\Belajar coding2023\.vscode\python machine learning6", line 139, in <module> ohe_cars = pd.get_dummies(cars[['Car']]) ~~~~^^^^^^^^^ File "C:\Users\BAGAS Laptop\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\frame.py", line 3767, in __getitem__ indexer = self.columns._get_indexer_strict(key, "columns")[1] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\BAGAS Laptop\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\indexes\base.py", line 5877, in _get_indexer_strict self._raise_if_missing(keyarr, indexer, axis_name) File "C:\Users\BAGAS Laptop\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\indexes\base.py", line 5938, in _raise_if_missing raise KeyError(f"None of [{key}] are in the [{axis_name}]") KeyError: "None of [Index(['Car'], dtype='object')] are in the [columns]"
问题核心
报错的本质是:你读取的CSV文件中没有名为'Car'的列,或者列名存在拼写错误、大小写不一致、前后空格等匹配问题。
解决步骤
先确认CSV的真实列名
在调用get_dummies前,先打印所有列名,明确文件里的实际列:import pandas as pd cars = pd.read_csv("caterogical data.csv") # 输出所有列名列表 print(cars.columns.tolist())你可能会发现列名是小写的
car、带空格的Car Model,或者拼写错误成Cars。修正列名匹配
根据上面得到的真实列名修改代码:- 若列名是
car,则改成cars[['car']] - 若列名带空格如
Car Name,则用cars[['Car Name']] - 若列名有前后空格,先清理列名再调用:
# 去除所有列名的前后空格 cars.columns = cars.columns.str.strip() ohe_cars = pd.get_dummies(cars[['Car']])
- 若列名是
验证文件读取正确性
可以先打印数据前几行,确认CSV是否正确读取:print(cars.head())如果数据为空或不符合预期,可能是文件路径错误,或者CSV分隔符不是逗号(比如制表符、分号),可以指定分隔符:
# 制表符分隔的文件 cars = pd.read_csv("caterogical data.csv", sep='\t') # 分号分隔的文件 cars = pd.read_csv("caterogical data.csv", sep=';')
内容的提问来源于stack exchange,提问作者Bagas Wahyu
相关产品推荐
相关产品推荐

