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

相关文章

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

一文详解如何在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