Python 在列上迭代以将dtype对象编码为分类值
我有一个数据集,其中充满了目前尚未编码的分类值。例如,我有一个名为Python 在列上迭代以将dtype对象编码为分类值,python,pandas,loops,scikit-learn,encode,Python,Pandas,Loops,Scikit Learn,Encode,我有一个数据集,其中充满了目前尚未编码的分类值。例如,我有一个名为condition的变量,它具有以下值: 非常好,非常好,非常好 我想对它们进行编码(给它们整数值),这样我就可以在回归中使用它们作为分类伪变量。然而,我的数据帧中有很多这样的内容,所以我想迭代每一列,并对所有的数据类型对象进行编码。 这是我的尝试: import pandas as pd from sklearn.preprocessing import LabelEncoder enc=LabelEncoder() for
condition
的变量,它具有以下值:
非常好
,非常好
,非常好
我想对它们进行编码(给它们整数值),这样我就可以在回归中使用它们作为分类伪变量。然而,我的数据帧中有很多这样的内容,所以我想迭代每一列,并对所有的数据类型对象进行编码。
这是我的尝试:
import pandas as pd
from sklearn.preprocessing import LabelEncoder
enc=LabelEncoder()
for column in df_06:
if df_06["column"].values==object:
df_06["column"]=enc.fit_transform(df_06["column"])
我的数据帧是
错误:
in()
df_06中列的
1:
--->2如果df_06[列]。值==对象:
3 df_06[column]=enc.fit_变换(df_06[column])
ValueError:包含多个元素的数组的真值为
模棱两可。使用a.any()或a.all()
for循环有很多错误。例如,pd[“column”]不会调用value列。此外,您正在尝试将整列与单个值“object”(您在注释中报告的错误)进行比较 对于您的问题,您可以使用
for column in df.select_dtypes(include=['whatever_type_you_want']):
df[column], _ = pd.factorize(df[column])
select\u数据类型也可以接受exclude作为参数。编码前,请确保您的列表示为
类别
:
df_06[list_of_columns_to_encode].apply(lambda col: col.astype('category'))
pd.get_dummies(df_06, columns=[list_of_columns_to_encode])
LabelEncoder
,请尝试以下操作:
le = LabelEncoder()
df_06[list_of_columns_to_encode].apply(le.fit_transform)
如果您想了解更多有关如何使用相同的标签编码
词典转换未来数据的信息,请参阅答案有什么问题吗?它返回什么?您是将它们编码为整数还是虚拟变量(也称为一个热编码)?这是两种不同的技术。您给出的示例似乎是有序的,最好使用您自己的映射进行编码。例如
{'Very Good':0,'Excellent':1,'Very Excellent':2}
LabelEncoder
无法保证正确的顺序我想将它们编码为傻瓜。无需手动操作即可快速映射它们的方法是什么?对于df_06中的列,在()1中:-->2如果df_06[column]。值==对象:3 df_06[column]=enc.fit_变换(df_06[column])值错误:具有多个元素的数组的真值不明确。使用a.any()或a.all()谢谢。调用该列的适当方式是什么?@J.DF您必须删除“:df06[列]谢谢。因此,新循环看起来是这样的:对于df_06:df_06[column]中的列,factorzefactorze实际上返回两个值(),因此您必须执行类似的操作:对于df:df[column]中的列,u=pd.factorze(df[column]),这将分别对每个列进行编码,如果你觉得可以的话。问题是它也会对整数值进行编码。这就是为什么我使用if df_06[column].values==object。还有,你做什么?