【问题标题】:drop function returning KeyError | Pandas删除函数返回 KeyError |熊猫
【发布时间】:2023-03-16 00:18:02
【问题描述】:

我正在为一场数据科学奥林匹克竞赛而学习,但遇到了一个小问题。我所做的就是使用 bin 将值范围为 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'

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

【问题讨论】:

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

标签: python python-3.x pandas machine-learning scikit-learn


【解决方案1】:

实际上你的python代码有一个错误,drop函数将列名作为一个列表而不是列本身只是尝试下面的代码它应该可以正常工作

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

在删除之前还有一件事,您必须将该列复制到 y 中,否则会出现错误,因为列“质量”已被删除

【讨论】:

    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 2018-03-16
    • 2022-01-21
    • 2018-05-13
    • 2022-12-11
    • 1970-01-01
    • 2020-02-02
    • 2021-01-18
    相关资源
    最近更新 更多