Python drop函数返回KeyError | Pandas

Python drop函数返回KeyError | Pandas,python,python-3.x,pandas,machine-learning,scikit-learn,Python,Python 3.x,Pandas,Machine Learning,Scikit Learn,我正在为一个数据科学奥林匹克竞赛学习,我遇到了一个小问题。我所做的就是用一个箱子将一行中的值(值范围为2-8)转换成好的或坏的,然后我使用标签编码器将它们设置为1或0 运行此代码时: import pandas as pd import numpy as np from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.p

我正在为一个数据科学奥林匹克竞赛学习,我遇到了一个小问题。我所做的就是用一个箱子将一行中的值(值范围为2-8)转换成好的或坏的,然后我使用标签编码器将它们设置为1或0

运行此代码时:

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, LabelEncoder

#load our data file
data = pd.read_csv("data.csv", delimiter=";")

#classify wines as good or bad
bins = (1,5,8)
group_names = ['bad', "good"]
data["quality"] = pd.cut(data["quality"], bins=bins, labels=group_names)
print(data["quality"].unique())

#list the labels as good or bad to 1 or 0
label_quality = LabelEncoder()
data["quality"] = label_quality.fit_transform(data["quality"])

#create our feature ad result sets
X = data.drop(data["quality"], axis=1)
y = data["quality"]

#create our training sets
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=10)

print(data.head(100))
我遇到了错误:

Traceback (most recent call last):
  File "main.py", line 21, in <module>    X = data.drop(data["quality"], axis=1)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/frame.py", line 3990, in drop    return super().drop(
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/generic.py", line 3936, in drop    obj = obj._drop_axis(labels, axis, level=level, errors=errors)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/generic.py", line 3970, in _drop_axis    new_axis = axis.drop(labels, errors=errors)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/indexes/base.py", line 5018, in drop    raise KeyError(f"{labels[mask]} not found in axis")
KeyError: '[0 0 0 ... 1 0 1] not found in axis'
回溯(最近一次呼叫最后一次):
文件“main.py”,第21行,X=data.drop(数据[“质量”],轴=1)
文件“/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site packages/pandas/core/frame.py”,第3990行,在drop return super()中。drop(
文件“/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site packages/pandas/core/generic.py”,第3936行,放置obj=obj.\u放置轴(标签,轴,级别=级别,错误=错误)
文件“/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site packages/pandas/core/generic.py”,第3970行,在_drop\u axis new\u axis=axis.drop中(标签,错误=错误)
文件“/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site packages/pandas/core/index/base.py”,第5018行,在drop-raise-KeyError中(f“{labels[mask]}未在axis中找到”)
KeyError:“[0 0…1 0 1]未在axis中找到”

它说我的行值在轴中找不到,但我已经指定了轴1,所以它不应该剪切它吗?

实际上python代码中有一个错误,drop函数将列名称作为列表,而不是列本身,只需在代码下面尝试它就可以了

#create our feature ad result sets
y = data["quality"]
X = data.drop(["quality"], axis=1)

在删除之前还有一件事,你必须在y中复制该列,否则它会给出错误,因为列“质量”被删除了

实际上你的python代码中有一个错误,drop函数将列名称作为列表,而不是列本身,只需在下面的代码中尝试就可以了

#create our feature ad result sets
y = data["quality"]
X = data.drop(["quality"], axis=1)

在删除之前还有一件事,您必须在y中复制该列,否则在删除列“quality”时会出现错误

再次检查
drop()
的语法。它采用列的名称,而不是完整的系列(
'quality'
而不是
数据['quality']
),对于drop命令,请尝试
X=data.drop(['quality'],axis=1)
X=data.drop(columns=['quality'],axis=1)
再次检查
drop()
的语法。它使用列的名称,而不是完整的系列(
'quality'
而不是
数据['quality']
)对于drop命令,请尝试
X=data.drop(['quality'],axis=1)
X=data.drop(columns=['quality'],axis=1)