【问题标题】:TypeError: my_label_encoder() takes 2 positional arguments but 3 were givenTypeError: my_label_encoder() 接受 2 个位置参数,但给出了 3 个
【发布时间】:2021-01-22 05:05:37
【问题描述】:

我正在尝试在 python 中编写一个带有两个 def 的类,这有助于我在不使用任何库的情况下从头开始执行 ONE_HOT ENCODING,没有类我的代码可以工作并执行 ONE_HOT_ENCODING 但在 class 内部,我遇到了我无法解决的问题如果有人可以提供帮助,我将不胜感激。 我的数据在这里:https://www.dropbox.com/s/z5y1mucs3h93izp/car.csv?dl=0 '''

import pandas as pd
import numpy as np
dataset = np.loadtxt(r'C:\Users\User\Downloads\car.csv', skiprows=1, delimiter=',', dtype='object', encoding='UTF-8')

class one_hot():
    def __init__(self,dataset = None ,column = None):
    
      self.dataset = dataset
      self.column = column

    def my_label_encoder( self,column):
       for index, label in enumerate(set(dataset[:, column])):
          dataset[dataset[:, column] == label, column] = index
      
    def one_hot_encoder(self,column):
      ncategory = np.max(dataset[:, column]) + 1
      print(ncategory)
      ohe = np.zeros((dataset.shape[0], ncategory))
      print(ohe)
      for index, category in enumerate(dataset[:, column]):
          print(index ,'index')
          print(category,'category')
          ohe[index, category] = 1
          print(ohe)
          a = pd.DataFrame(ohe)    
      return  a

   
e = one_hot()

b = e.my_label_encoder(dataset,1)

c = b.one_hot_encoder(dataset,1)

''' 我得到这个错误:

TypeError: my_label_encoder() takes 2 positional arguments but 3 were given

如果你能帮助我,我会很高兴。

【问题讨论】:

  • 您发布的代码包含缩进错误,请编辑您的帖子以使缩进正确
  • @AsafAmnony 希望现在没事吧?

标签: python machine-learning deep-learning one-hot-encoding


【解决方案1】:

my_label_encoder() 函数有 2 个参数,一个是 self,除此之外应该只有 1 个其他参数。

你已经给出的自我('e'),同时将其称为 e.my_label_encoder(dataset,1)

请。修改你的代码是

def my_label_encoder(self, dataset, column) 

否则在调用 my_label_encoder() 时不要传入数据集。在 my_label_encoder() 中,您可以在 init 中使用它时将其称为 self.dataset,因此您可以在制作类对象时通过。

import pandas as pd
import numpy as np
dataset = np.loadtxt(r'C:\Users\User\Downloads\car.csv', skiprows=1, delimiter=',', dtype='object', encoding='UTF-8')

class one_hot():
    def __init__(self,dataset = None ,column = None):
    
      self.dataset = dataset
      self.column = column

    def my_label_encoder( self,column):
       for index, label in enumerate(set(self.dataset[:, column])):
          self.dataset[self.dataset[:, column] == label, column] = index
      
    
e = one_hot(dataset)

b = e.my_label_encoder(1)

【讨论】:

  • 是否可以共享整个代码?因为我已经改变了,那是行不通的
  • 谢谢,如果可以的话,请您支持我的问题。
  • 可以分享您的联系地址 Linkedin 或 Gmail 或 ..
猜你喜欢
  • 2021-02-02
  • 2020-03-27
  • 2022-01-19
  • 2017-02-18
  • 2020-05-23
  • 2020-01-06
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多