类别变量的整数编码:encoding categorical variable to integers

需求:把 pandas dataframe 中的属于类别或字符串类型的列编码为整数,跳过缺失值

import numpy as np
import pandas as pd
from sklearn.preprocessing import OrdinalEncoder

df = pd.DataFrame({
    'f1': ['a', 'b', 'a', None],
    'f2': ['x', 'y', 'y', 'z']
})

ordinal_enc_dict = {}
for col_name in df.columns:
    ordinal_enc_dict[col_name] = OrdinalEncoder()

    col = df[col_name]
    col_not_null = col[col.notnull()]

    reshaped_vals = col_not_null.values.reshape(-1, 1)
    encoded_vals = ordinal_enc_dict[col_name].fit_transform(reshaped_vals)

    df.loc[col.notnull(), col_name] = np.squeeze(encoded_vals)

print(df)
#      f1 f2
# 0     0  0
# 1     1  1
# 2     0  1
# 3  None  2

for col_name, encoder in ordinal_enc_dict.items():
    print(col_name, encoder.categories_)
# f1 [array(['a', 'b'], dtype=object)]
# f2 [array(['x', 'y', 'z'], dtype=object)]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值