数据处理之数据类型转换

  • 点赞、关注再看,养成良好习惯
  • Life is short, U need Python

1. 概述

本文主要以小费数据集(tips.csv)为例,介绍数据预处理中常用到的不同数据类型转换方法。

  • 分类型数据转换成数值型;
  • 连续型数据转换成离散型。

首先,对小费数据集做一简单介绍:

  • tips包含244个样本,对应数据集的每行数据。每行数据包含每个样本的七个特征(总消费金额、小费金额、顾客性别、顾客是否抽烟、聚餐的星期、聚餐的时间段、聚餐人数),所以tips数据集是一个244行7列的二维表。
  • 其中,总消费金额(total_bill)和小费金额(tip)均为连续型数据集;顾客性别(sex)、是否抽烟(smoker)、聚餐的星期(day)、聚餐的时间段(time)均为分类型数据;聚餐人数(size)为离散型数据。
    在这里插入图片描述

2. 读取数据

import pandas as pd
tips = pd.read_csv('tips.csv')
tips.head()

读取结果如上图所示(tips数据集是seaborn自带数据集,也可以在线下载读取)。

3. 分类型转数值型

3.1 map()函数

df1 = tips.copy()

dict1 = {'Male':0,'Female':1}       # 设置字典参数
df1.sex = df1.sex.map(dict1)
dict2 = {'No':0,'Yes':1}
df1.smoker = df1.smoker.map(dict2)
dict3 = {'Sun':6, 'Sat':5, 'Thur':3, 'Fri':4}
df1.day = df1.day.map(dict3)
dict4 = {'Dinner':0, 'Lunch':1}
df1.time = df1.time.map(dict4)

df1.head()

在这里插入图片描述

3.2 repalce()函数

df2 = tips.copy()

df2.sex = df2.sex.replace(df2.sex.unique(),[0,1])
df2.smoker = df2.smoker.replace(df2.smoker.unique(),[0,1])
df2.day = df2.day.replace(df2.day.unique(),[6,5,3,4])
df2.time = df2.time.replace(df2.time.unique(),[0,1])

df2.head()

在这里插入图片描述

3.3 LabelEncoder(推荐)

df3 = tips.copy()

from sklearn.preprocessing import LabelEncoder

df3.sex = LabelEncoder().fit_transform(df3.sex)
df3.smoker = LabelEncoder().fit_transform(df3.smoker)
df3.day = LabelEncoder().fit_transform(df3.day)
df3.time = LabelEncoder().fit_transform(df3.time)

df3.head()

在这里插入图片描述

3.4 get_dummies()函数

df4 = tips.copy()

df4 = pd.get_dummies(df4.iloc[:,2:-1])  # 返回pd.DataFrame对象

df4.head()

在这里插入图片描述

df4 = tips.copy()

df4 = pd.get_dummies(df4,columns=['sex','smoker','day','time'])  # 返回pd.DataFrame对象

df4.head()

在这里插入图片描述

  • 注:这样可以避免数据的再次合并!

3.5 OneHotEncoder

df5 = tips.copy()

from sklearn.preprocessing import OneHotEncoder

mat = OneHotEncoder().fit_transform(df5.iloc[:,2:-1])    # 返回sparse matrix对象
arr = arr.toarray()   # 返回np.array对象
arr

在这里插入图片描述

4. 连续型转离散型

tips.describe()

在这里插入图片描述

4.1 等宽法

data1 = tips.copy()

data1.total_bill = pd.cut(x=data1.total_bill,bins=4,labels=range(0,4))
data1.tip = pd.cut(x=data1.tip,bins=4,labels=range(0,4))

data1.head()

在这里插入图片描述

4.2 等频法

data2 = tips.copy()

data2.total_bill = pd.cut(x=data2.total_bill,bins=4,labels=range(0,4))
data2.tip = pd.cut(x=data2.tip,bins=4,labels=range(0,4))

data2.head()

在这里插入图片描述

4.3 二值化

二值化常用方法是Binarizer类及其类方法transform()。基本原理是设置一个阈值threshold,当记录数据大于该阈值,则标注为1,否则为0。

data3 = tips.copy()

import numpy as np
from sklearn.preprocessing import Binarizer

arr1 = np.array(data3.total_bill)
data3.total_bill = Binarizer(threshold=20).transform(arr1.reshape(-1, 1))
arr2 = np.array(data3.tip)
data3.tip = Binarizer(threshold=5).transform(arr2.reshape(-1, 1))

data3.head()
  • 代码中的threshold参数值是在最小值、最大值之间博主自己取的值!
    在这里插入图片描述

补充知识

  • reshape(1,-1) 转换成1行
  • reshape(2,-1) 转换成2行
  • reshape(-1,1) 转换成1列
  • reshape(-1,2) 转换成2列

5. 小结

  • “sex”,“smoker”,“day”,"time"四个特征为分类型数据可以通过数字编码进行数值化。

  • “tatal_bill”,"tip"两个特征为连续型数据可以通过等宽法、等频法、二值化等进行离散化。

  • 用户可以结合自己的数据分别利用上述方法转换成自己所需类型的数据集!


  • 写作不易,切勿白剽
  • 博友们的点赞关注就是对博主坚持写作的最大鼓励
  • 持续更新,未完待续…
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PyQuant

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值