数据清洗—制作one-hot

这篇博客介绍了如何利用pandas进行数据清洗中的one-hot编码操作,特别强调了对于非标准格式的数据需要预处理才能进行编码转换。作者分享了自己的处理方法,包括对二值化属性的处理和字符编码转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据清洗—制作one-hot

使用pandas进行one-hot编码
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)

pandas中get_dummies()函数可以将字段进行编码,转换为01形式,其中prefix可以为每个新展开的列名添加前缀。
但是,笔者发现它较易使用在数据为每一列为单独的字符
4641

df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'], 'C': [1, 2, 3]})

## one-hot
df_dumm = pd.get_dummies(df)

86

my_one_hot

但是对于数据为下面形式的可就不能直接转换了,需要先预处理一下,之后转换为one-hot形式:
6416
我的做法是:

## tqdm_notebook可以导入tqdm包来使用
def one_hot_my(dataframe, attri):
    sample_attri_list = []
    sample_attri_loc_dic = {}
    loc = 0
    dataframe[attri] = dataframe[attri].astype(str)
    for attri_id in tqdm_notebook(dataframe[attri]):
        attri_id_pro = attri_id.strip().split(',')
        for key in attri_id_pro:
            if key not in sample_attri_loc_dic.keys():
                sample_attri_loc_dic[key] = loc
                loc+=1
        sample_attri_list.append(attri_id_pro)
    print("开始完成one-hot.......")      
    one_hot_attri = []
    for attri_id in tqdm_notebook(sample_attri_list):
        array = [0 for _ in range(len(sample_attri_loc_dic.keys()))]
        for key in attri_id:
            array[sample_attri_loc_dic[key]] = 1
        one_hot_attri.append(array)
    print("封装成dataframe.......")  
    ## 封装成dataframe
    columns = [attri+x for x in sample_attri_loc_dic.keys()]
    one_hot_rig_id_df = pd.DataFrame(one_hot_attri,columns=columns)
    return one_hot_rig_id_df

对属性二值化可以采用:

## 对属性进行二值化
def binary_apply(key, attri, dataframe):
    key_modify = 'is_' + ''.join(lazy_pinyin(key)) + '_' + attri
    print(key_modify)
    dataframe[key_modify] = dataframe.apply(lambda x:1 if x[attri]== key else 0, axis=1)
    return dataframe

对字符进行编码,将字符转换为0,1,2…:


## 对字符进行编码
# columns = ['job', 'marital', 'education','default','housing' ,'loan','contact', 'poutcome']
def encode_info(dataframe, columns):
    for col in columns:
        print(col)
        dataframe[col] = pd.factorize(dataframe[col])[0]
    return dataframe

986

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值