pandas数据分析36——快速独热和反独热处理

2023-10-31 13:11

本文主要是介绍pandas数据分析36——快速独热和反独热处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

做数据预处理的时候,很多文本分类变量需要变为数值型。

下面提供一些方法,就以最经典的泰但尼克号数据集作为例子。

先导包读取数据

import numpy as np
import pandas as pd
data=pd.read_csv('train.csv')
data=data.drop(columns=['Name','Ticket','Cabin'],axis=1)
data['Embarked'].fillna(method='pad',axis=0,inplace=True)
data.head()

 

 可以看到sex和embarked两列是文本,下面处理为能运算的数值型。


 

方法一:get_dummies

这是pandas库提供的最快的独热方法:

pd.get_dummies(data).head()

可以看到SEX两类和embarked三类都变为了虚拟变量。


方法二:字典映射

上面的方法简单,但是这样独热处理可能会让数据特征变多,列变多了。若某些特征的分类类别很多,那么将会造成维度灾难,数据变得超高维,超级稀疏。

那么可以将分类变量还是为一列,相对应的类别是=就用0,1,2...去表示。

d1={'male':0,'female':1}
d2={'S':1,'C':2,'Q':3}data['Sex']=data['Sex'].map(d1)
data['Embarked']=data['Embarked'].map(d2)data.head()

 

  上面代码就将男性映射为0,女性为1,embarked里面的SCQ映射为1,2,3。


方法三:unique()

思路和上面的方法二差不多,方法二的缺点是,一个变量里面的类别太多了,我们手写字典很麻烦...所以就用unique生成变量的类别

#映射
lis=list(data['Embarked'].unique())
d=dict([(key,value) for (value,key) in enumerate(lis)])
print(d)

然后可以像上面方法二一样映射就行。

有时候我们预测出来了数值,但是想映射回文本变量怎么办 ,可以反转一下字典,然后再映射回去:

#反转
d2=dict([ (value,key) for (key,value) in d.items()])
print(d2)


方法四:groupby

分组聚合的函数也是可以直接将文本变为数值的:

#还可以
data.groupby('Embarked').ngroup()


方法五:因子化 

上面的方法或多或少都有点不全面或者不简洁,下面这个是最简洁的

#最简单的
codes,uniques=pd.factorize(data['Embarked'])
uniques

codes

 可以看到因子化factorize方法,直接就生成了所有类别变量的唯一取值列表,然后把对应的数值映射好了。

当然预测出来的数值型数据也可以像方法二映射回去:

d=dict([(key,value) for (value,key) in enumerate(uniques)])
d2=dict([ (value,key) for (key,value) in d.items()])
pd.Series(codes).map(d2)


反独热 

有时候需要进行反独热处理,就是将多个列的虚拟变量变为一个变量,例如下面这个例子:

data = pd.read_excel('副本data.xlsx').iloc[:,6:]  # 读取数据
data=data[data['是否了解购买']==2]
data.head()

例如前几列变量,其实只表示一个变量:‘了解渠道’,有淘宝,新媒体,杂志,门店等等,这是标准的独热了的情况,取值只有0和1,现在自定义一个函数,处理这种反独热情况:

def rev_onehot(df,onehot_columns,new_column,drop=False):  #要处理的数据框,反独热的列,新的总名称,是否删除df[new_column]=list(df[onehot_columns].to_numpy().argmax(axis=1))df[new_column]=data[new_column].map(dict([(value,key)for (value,key)in enumerate(onehot_columns)]))if drop:df=df.drop(columns=onehot_columns)return df

 上面的函数有四个参数 :要处理的数据框,反独热的列,新的总名称,是否删除。

使用像下面这样:

data=rev_onehot(df=data,onehot_columns=['淘宝','新媒体','电视杂志','线下门店','熟人推荐','其他'],new_column='了解渠道',drop=True)
data=rev_onehot(df=data,onehot_columns=['鲜天麻','干天麻','天麻粉','天麻切片','天麻药剂'],new_column='了解天麻制品种类',drop=True)
data=rev_onehot(df=data,onehot_columns=['口感','价格','包装','种类'],new_column='购买考虑因素',drop=True)
data=rev_onehot(df=data,onehot_columns=['价格偏高','不了解食用方法','不了解功效','购买渠道','质量参差不齐'],new_column='未购买原因',drop=True)
data=rev_onehot(df=data,onehot_columns=['100以下','101-200','201-300','300以上'],new_column='接受价格区间',drop=True)

查看处理完的:

data.head()

 可以看到变量变少了,后面几个变量都是反独热回去了的。

这篇关于pandas数据分析36——快速独热和反独热处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/315587

相关文章

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Python如何快速下载依赖

《Python如何快速下载依赖》本文介绍了四种在Python中快速下载依赖的方法,包括使用国内镜像源、开启pip并发下载功能、使用pipreqs批量下载项目依赖以及使用conda管理依赖,通过这些方法... 目录python快速下载依赖1. 使用国内镜像源临时使用镜像源永久配置镜像源2. 使用 pip 的并