LabelEncoder -- TypeError: 参数必须是字符串或数字
Posted
技术标签:
【中文标题】LabelEncoder -- TypeError: 参数必须是字符串或数字【英文标题】:LabelEncoder -- TypeError: argument must be a string or number 【发布时间】:2020-09-11 18:07:09 【问题描述】:import pandas as pd
from sklearn.preprocessing import LabelEncoder
pd.set_option('display.max_columns', 500)
df=pd.read_csv("https://media-doselect.s3.amazonaws.com/generic/831JKKEkW7kqd5M4evNva9LyB/insurance_grouped.csv")
le = LabelEncoder()#use this encoder to encod
df.BMI_group = le.fit_transform(df.BMI_group.values)
print(df.head())
预期产出 - 年龄 性别 bmi 儿童 吸烟区收费 BMI_group 0 19 0 27.900 0 1 3 16884.92400 2 1 18 1 33.770 1 0 2 1725.55230 1 2 28 1 33.000 3 0 2 4449.46200 1 3 33 1 22.705 0 0 1 21984.47061 0 4 32 1 28.880 0 0 1 3866.85520 2
错误信息 - TypeError Traceback(最近一次调用最后一次) ~\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py in _encode(values, uniques, encode) 104 尝试: --> 105 res = _encode_python(值,唯一性,编码) 106 除了类型错误:
~\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py in _encode_python(值,唯一性,编码) 58 如果 uniques 为 None: ---> 59 个唯一值 = 排序(集合(值)) 60 个唯一值 = np.array(uniques, dtype=values.dtype)
TypeError: '
在处理上述异常的过程中,又发生了一个异常:
TypeError Traceback(最近一次调用最后一次) 在 4 #df=pd.read_csv("https://media-doselect.s3.amazonaws.com/generic/831JKKEkW7kqd5M4evNva9LyB/insurance_grouped.csv") 5 le = LabelEncoder()#使用这个编码器进行编码 ----> 6 df.BMI_group = le.fit_transform(df.BMI_group.values) 7 df.BMI_group
~\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py in fit_transform(self, y) 第234章 235 y = column_or_1d(y,警告=真) --> 236 self.classes_, y = _encode(y, encode=True) 第237章 238
~\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py in _encode(values, uniques, encode) 105 res = _encode_python(值,唯一性,编码) 106 除了类型错误: --> 107 raise TypeError("参数必须是字符串或数字") 108返回资源 109 其他:
TypeError: 参数必须是字符串或数字
【问题讨论】:
这个thread的可能重复? 【参考方案1】:np.nan
被解释为浮点数,因此不能与 srting 值进行比较。这是更新的代码。
import pandas as pd
from sklearn.preprocessing import LabelEncoder
import numpy as np
pd.set_option('display.max_columns', 500)
df=pd.read_csv("https://media-doselect.s3.amazonaws.com/generic/831JKKEkW7kqd5M4evNva9LyB/insurance_grouped.csv")
df["BMI_group"] = df["BMI_group"].replace(np.nan, 'none', regex=True)
le = LabelEncoder()#use this encoder to encod
df.BMI_group = le.fit_transform(df.BMI_group.values)
print(df.head())
【讨论】:
别担心,伙计!以上是关于LabelEncoder -- TypeError: 参数必须是字符串或数字的主要内容,如果未能解决你的问题,请参考以下文章
python - TypeError:不可排序的类型:str()> float()
TypeError: fit_transform() 接受 2 个位置参数,但给出了 3 个