Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列上迭代以将dtype对象编码为分类值_Python_Pandas_Loops_Scikit Learn_Encode - Fatal编程技术网

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。还有,你做什么?