Python数据预处理----仿Label原理 字符类型数据映射成数值数据

看来题主还太年轻,不知道Python已有的库中有对于字符串类型数据的转换,因此手动写了一个。

但是还是要提前说一下,相关方法都有哪些,后来以便做一次总结。

对于某些数据属性是字符串代表的类型,在分类、聚类、回归时,为了方便处理,会将其对应转化成数值型。

相关转换方法有: label encoding/one-hot encoding /target encoding等

 

自定义 仿 label 代码如下:

import pandas as pd



#将所获得的字典存入txt文件中
def saveDictToTxt(dict,fileName):
    f = open(fileName, 'w')
    f.write(str(dict))
    f.close()



#从txt获得已有的dict
def getDictFromTxt(fileName):
    f = open(fileName, 'r')
    a = f.read()
    dict = eval(a)
    f.close()
    return dict

#利用字典类型 实现 字符类别转换成数字类别
def changeToNum(data,fileColumnName):
    fileExit=1
    #如果文件不存在 则字典初始化为空
    try:
        # dict=getDictFromExcel(fileColumnName)
        dict=getDictFromTxt(fileColumnName)
        print("use old:",fileColumnName)
    except:
        dict={}
        fileExit=0
    #数据总行数
    size=data.size
    #要在原有的字典上进行累加
    j=len(dict)
    if j==0:
        print("use new:",fileColumnName)
    # print("len:",j)

    for i in range(0,size):
        # print(i)
        # 如果有则替换,无则在字典中相应替换
        if data[i] in dict.keys():
            data[i]=dict[data[i]]
        else:
            dict[data[i]]=j
            data[i] = dict[data[i]]
            j=j+1
            print(j)
            fileExit = 0
    #更新
    if fileExit==0:
        saveDictToTxt(dict,fileColumnName)
    # saveDictToExcel(dict,fileColumnName)

# 改变所有列
def changeAll(data,fileSave):
    # 获得所有的列名
    columnNum = list(data)
    for i in columnNum:
        fileColumnName = i + ".txt"
        changeToNum(data[i],fileColumnName)
        fileColumnName2=i + ".csv"
        data[i].to_csv(fileColumnName2)
    data.to_csv(fileSave)

#判断数据是否存在空值数据 存在则填充为0 存储并另存为
def dataFillNull(data,fileName):
    dataIsNull = data.isnull().any()
    # 如果为空则填充
    for i in dataIsNull:
        if i:
            print("exsit null,fill them with 0")
            data.fillna(0, inplace=True)
            break
    data.to_csv(fileName)

if __name__ == '__main__':
    # fileName = "Text_a_op1.csv"
    fileName = "Text_op2.csv"
    fileSave="Text_op8.csv"

    # data = pd.read_excel(fileName)
    data=pd.read_csv(fileName)
    # print(data.isnull().any())
    #缺失填充为0  必须提前填充 否则字典类型从txt导入时
    dataFillNull(data,"Text_t_op1.csv")
    print(data.isnull().any())
    changeAll(data,fileSave)


Python库中已有方法

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

train=pd.read_csv("train_trans.csv")
test=pd.read_csv("test_a_trans.csv")
cat_cols=train.columns.values

for col in cat_cols:
    le = LabelEncoder()
    le.fit(np.concatenate([train[col], test[col]]))
    train[col] = le.transform(train[col])
    test[col] = le.transform(test[col])
print(train)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值