将 pandas 数据帧中的对象数据类型转换为动态分类的最佳实践



我正在尝试将一些object列转换为分类列。以下是df

CODE    ZONE    ZCLA    AMNT
1001     EC      M      200
1002     NW      G      100
1003     SE      N      150
1004     SC      G      200
1005     EC      M      100

因此,应对列ZONEZCLA进行编码,生成的数据帧将如下所示

CODE    ZONE    ZCLA    AMNT
1001     0       0      200
1002     1       1      100
1003     2       2      150
1004     3       0      200
1005     0       1      100

我正在遵循三种方法来实现相同的目标。

方法1:

for cl in df.select_dtypes(include=['object']):
df[cl],_ = pd.factorize(df[cl])

方法2:

for cl in df.select_dtypes(include=['object']):
df[cl] = df[cl].astype('category')
df[cl] = df[cl].apply(lambda x : x.cat.codes)

方法3:

le=LabelEncoder()
for cl in df.select_dtypes(include=['object']):
df[cl] = df[cl].astype('category')
df[cl] = df[cl].apply(le.fit_transform())

方法 1 是创建一个我不想要的标签 -1。

方法 2 给了我一个错误:AttributeError: 'str' object has no attribute 'cat'

方法 3 给出错误:AttributeError: 'str' object has no attribute 'astype'

任何人都可以对此有所了解吗?我错过了什么吗?

嗨,我可以尝试分享我在遇到相同问题时获得的一些见解。 我发现要运行 lambda 函数lambda x : x.cat.codes即使它是类别 dtypes,您也无法直接选择列。

选择带有cat_columns = df.select_dtypes(['category']).columns列的方法

遵循我的实现。

df = pd.DataFrame({'col1':[1,2,3,4,5], 'col2':list('abcab'),  'col3':list('ababb')})
def __pd_to_cat_trans(df, column_name):
print("Create the Label DataFrame")
df[column_name] = df[column_name].astype('category')
df_label = pd.DataFrame()
df_label['Label'] = df[column_name]
df_label['Cat_value'] = df[column_name].cat.codes
print("Transform the column {} to a categorical value".format(column_name))
df[column_name] = df[column_name].astype('category')
cat_columns = df.select_dtypes(['category']).columns
df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes)
return df, df_label
orig_df = pd.DataFrame({'col1':[1,2,3,4,5], 'col2':list('abcab'),  'col3':list('ababb')})
a, b = __pd_to_cat_trans(orig_df, 'col2')
print(orig_df, "n", a,"n", b)
Create the Label DataFrame
Transform the column col2 to a categorical value
col1 col2 col3
0     1    a    a
1     2    b    b
2     3    c    a
3     4    a    b
4     5    b    b 
col1  col2 col3
0     1     0    a
1     2     1    b
2     3     2    a
3     4     0    b
4     5     1    b 
Label  Cat_value
0     a          0
1     b          1
2     c          2
3     a          0
4     b          1

可以找到相关问题 在熊猫数据帧中转换分类数据

最新更新