作者:Happy的紫璐 | 来源:互联网 | 2024-09-26 18:39
我有点困惑-在这里创建ML模型。
我正在尝试从“大”数据框(180列)中获取分类特征并对其进行一次热分析,以便我可以找到特征之间的相关性并选择“最佳”特征。
这是我的代码:
# import labelencoder
from sklearn.preprocessing import LabelEncoder
# instantiate labelencoder object
le = LabelEncoder()
# apply le on categorical feature columns
df = df.apply(lambda col: le.fit_transform(col))
df.head(10)
运行此命令时,出现以下错误:TypeError :(“参数必须是字符串或数字”,“在索引LockTenor处发生”)
所以我转到LockTenor字段并查看所有不同的值:
df.LockTenor.unique()
这将导致以下结果:array([60.0,45.0,'z',90.0,75.0,30.0],dtype = object)
对我来说似乎是所有字符串和数字。...它是否消除了错误,因为它是浮点数,不一定是INT?
您会收到此错误消息,因为确实有浮点数和字符串的组合。看一下这个例子:
# Preliminaries
import pandas as pd
from sklearn.preprocessing import LabelEncoder
# Create DataFrames
# df1 has all floats
d1 = {'LockTenor':[60.0,45.0,15.0,90.0,75.0,30.0]}
df1 = pd.DataFrame(data=d1)
print("DataFrame 1")
print(df1)
# df2 has a string in the mix
d2 = {'LockTenor':[60.0,'z',30.0]}
df2 = pd.DataFrame(data=d2)
print("DataFrame 2")
print(df2)
# Create encoder
le = LabelEncoder()
# Encode first DataFrame 1 (where all values are floats)
df1 = df1.apply(lambda col: le.fit_transform(col),axis=0,result_type='expand')
print("DataFrame 1 encoded")
print(df1)
# Encode first DataFrame 2 (where there is a combination of floats and strings)
df2 = df2.apply(lambda col: le.fit_transform(col),result_type='expand')
print("DataFrame 2 encoded")
print(df2)
如果运行此代码,您将看到df1
的编码没有问题,因为它的所有值都是浮点数。无论是谁,您都会报告df2
的错误。
一个简单的解决方法是将列强制转换为字符串。您可以在相应的lambda函数中执行此操作:
df2 = df2.apply(lambda col: le.fit_transform(col.astype(str)),result_type='expand')
作为其他建议,我建议您查看一下数据,看看它们是否正确。对我来说,在同一列中混合使用浮点数和字符串有点奇怪。
最后,我想指出sci-kit's LabelEncoder
performs a simple encoding of variables,它不执行一键编码。如果您愿意,我建议您看看OneHotEncoder
,
试试这个:
df[cat] = le.fit_transform(df[cat].astype(str))