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

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程