Saya memiliki kumpulan data dengan kategori. Di kolom 4 saya memiliki 2 nilai (dua dan empat yang merupakan string). Tahukah Anda mengapa saya mendapatkan kesalahan dan bagaimana cara memperbaikinya? TypeError: argumen harus berupa string atau angka

Traceback (most recent call last):

  File "C:..".py", line 112, in _encode
    res = _encode_python(values, uniques, encode)

  File "C:...py", line 60, in _encode_python
    uniques = sorted(set(values))

TypeError: '<' not supported between instances of 'str' and 'float'

Selama penanganan pengecualian di atas, pengecualian lain terjadi:

Traceback (most recent call last):

  File "C...".py", line 35, in <module>
    X[:, 4] = labelencoder_X4.fit_transform(X[:, 4])

  File "C:...py", line 252, in fit_transform
    self.classes_, y = _encode(y, encode=True)

  File "C:....py", line 114, in _encode
    raise TypeError("argument must be a string or number")

TypeError: argument must be a string or number

Kode:

import numpy as np #mathematical tools
import matplotlib.pyplot as plt #plot nice charts
import pandas as pd #import and manage data sets

# Making a list of missing value types
missing_values = ["?"]
df= pd.read_csv('D:\\data.csv',na_values = missing_values)

#print the new table with the missing values 
# print (df)
# print (df.isnull())


X = df.iloc[:, :-1].values #Matrix - independent variables (features)
y = df.iloc[:, 24].values #dependent variables vectors


from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X2 = LabelEncoder()
X[:, 2] = labelencoder_X2.fit_transform(X[:, 2]) #gas=0, fuel=1 

labelencoder_X3 = LabelEncoder()
X[:, 3] = labelencoder_X3.fit_transform(X[:, 3])

#I get an error her
labelencoder_X4 = LabelEncoder()
X[:, 4] = labelencoder_X4.fit_transform(X[:, 4])

labelencoder_X5 = LabelEncoder()
X[:, 5] = labelencoder_X5.fit_transform(X[:,5])

labelencoder_X6 = LabelEncoder()
X[:, 6] = labelencoder_X6.fit_transform(X[:, 6])

labelencoder_X7 = LabelEncoder()
X[:, 7] = labelencoder_X7.fit_transform(X[:, 7])

labelencoder_X13 = LabelEncoder()
X[:, 13] = labelencoder_X13.fit_transform(X[:, 13])

labelencoder_X14 = LabelEncoder()
X[:, 14] = labelencoder_X14.fit_transform(X[:, 14])

labelencoder_X15 = LabelEncoder()
X[:, 16] = labelencoder_X14.fit_transform(X[:, 16])

from sklearn.impute import SimpleImputer
imputer=SimpleImputer(missing_values="NaN", strategy='mean')
imputer.fit(X[:, 1:24])  
X[:, 1:24]=imputer.transform(X[:, 1:24])

Terima kasih atas bantuannya!

img of the column

-3
ddd 7 Juli 2020, 12:52

1 menjawab

Jawaban Terbaik

Kesalahan ini biasanya terjadi saat memiliki nilai NaN dalam kolom dengan string. NaN bertipe float, dan inilah mengapa Anda mendapatkan:

TypeError: '<' not supported between instances of 'str' and 'float'

Anda harus mengganti nilai yang hilang sebelum yang lainnya. Salah satu cara untuk melakukannya:

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# Making a list of missing value types
missing_values = ["?"]
df = pd.read_csv('D:\\data.csv', na_values=missing_values)


X = df.iloc[:, :-1]
y = df.iloc[:, 24]

X.iloc[:, 4] = X.iloc[:, 4].fillna('NaN') # <-- add this line

X.iloc[:, 4] = LabelEncoder().fit_transform(X.iloc[:, 4])

Sekarang pengkodean label seharusnya tidak menimbulkan masalah lagi. Anda harus melakukan substitusi ini untuk semua kolom dengan string.

0
afsharov 7 Juli 2020, 12:44