pandas@get_dummies@ 虚拟变量@one-hot encoding

news/2024/4/24 13:53:16/文章来源:https://blog.csdn.net/xuchaoxin1375/article/details/129688884

文章目录

    • 虚拟变量@one-hot encoding
    • demo
      • demo1
      • demo2
      • demo3
        • 数值化
        • 插值处理NaN数值化
        • 其他get_dummies例

虚拟变量@one-hot encoding

  • pandas.get_dummies — pandas 1.5.3 documentation (pydata.org)

  • 将分类变量转换为虚拟/指示变量。

    • 在数据分析领域,dummies通常被翻译为“虚拟变量”、“指示变量”或“哑变量”,这些术语都是比较通用的翻译。其中,虚拟变量(dummies) 是最接近原始英文含义的翻译,而指示变量和哑变量则更加抽象。因此,通常建议使用“虚拟变量”,它能够比较直观地表达出数据转换的含义
  • 在数据分析中,有时需要将分类变量转换为虚拟变量或指示变量。该过程可以将具有一组可能值的单个分类变量转换为多个二元变量,每个变量代表一个可能的值。

  • 例如,假设您有一个名为“颜色”的分类变量,其可能的值是“红色”、“蓝色”和“绿色”。通过将此变量转换为三个虚拟变量,“红色”对应的变量将设置为1,而其他两个变量将设置为0,以及其他两种可能的值。

  • 这种转换可以使得机器学习模型可以更好地理解和利用分类变量的信息,因为它们不再被视为单个离散值。

  • Converting a categorical variable into dummy/indicator variables is a common technique used in data preparation and analysis. It involves creating one or more binary (0 or 1) variables to represent each category of the original variable.

    Here’s an example of how to do this in Python using pandas:

    import pandas as pd# create a sample dataframe with a categorical variable
    df = pd.DataFrame({'fruit': ['apple', 'banana', 'orange', 'apple', 'orange']})# use get_dummies() to create dummy variables
    dummy_df = pd.get_dummies(df['fruit'], prefix='fruit')# concatenate the dummy variables with the original dataframe
    df = pd.concat([df, dummy_df], axis=1)# drop the original categorical variable
    df.drop('fruit', axis=1, inplace=True)print(df)
    

    Output:

      fruit_apple  fruit_banana  fruit_orange
    0            1             0             0
    1            0             1             0
    2            0             0             1
    3            1             0             0
    4            0             0             1
    

    In this example, the get_dummies() function creates three dummy variables (fruit_apple, fruit_banana, and fruit_orange) based on the three unique categories in the original fruit column. The prefix argument adds a prefix to the column names for easier identification. The resulting dummy variables are then concatenated with the original dataframe using pd.concat(), and the original categorical variable is dropped using the drop() method.

demo

demo1

  • Converting a categorical variable into dummy/indicator variables is a common data preparation step in machine learning and statistical analysis. This process involves creating new binary variables, one for each possible category in the original variable. These binary variables take a value of 1 if the observation belongs to that category and 0 otherwise.

  • Here’s an example of how to convert a categorical variable “Color” into dummy/indicator variables:

    Original dataset:

    IDColor
    1Red
    2Green
    3Blue
    4Yellow
    5Red

    After converting “Color” into dummy variables, the dataset would look like this:

    IDColor_RedColor_GreenColor_BlueColor_Yellow
    11000
    20100
    30010
    40001
    51000

demo2

  • import pandas as pddf = pd.DataFrame({'color': ['red', 'blue', 'green', 'red']})
    dummies = pd.get_dummies(df['color'], prefix='color')
    print(dummies)
    •    color_blue  color_green  color_red
      0           0            0          1
      1           1            0          0
      2           0            1          0
      3           0            0          1
      
  • df_with_dummies = pd.concat([df, dummies], axis=1)
    print(df_with_dummies)
    •    color  color_blue  color_green  color_red
      0    red           0            0          1
      1   blue           1            0          0
      2  green           0            1          0
      3    red           0            0          1
      
  • 这里我们首先创建了一个包含分类变量“color”的DataFrame,然后使用get_dummies()函数将其转换为虚拟变量,并设置了前缀为“color”。最后,我们将原始DataFrame与虚拟变量合并起来形成新的DataFrame,即df_with_dummies

demo3

  • import os
    #指向父目录的一个名为data的目录
    data_dir = os.path.join('..', 'data')# 将自定目录创建(指定exist_ok=True,如果要创建的目录已经存在,则跳过)
    os.makedirs(data_dir, exist_ok=True)import pandas as pd
    data_file = os.path.join('..', 'data', 'house_tiny.csv')
    with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n')  # 列名f.write('NA,Pave,127500\n')  # 每行表示一个数据样本f.write('2,NA,106000\n')f.write('4,NA,178100\n')f.write('NA,NA,140000\n')data = pd.read_csv(data_file)
    print(data)
    
  • 本例中,对于inputs中的类别值或离散值,我们将“NaN”视为一个类别。

  •    NumRooms Alley   Price
    0       NaN  Pave  127500
    1       2.0   NaN  106000
    2       4.0   NaN  178100
    3       NaN   NaN  140000
    
  • inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
    print(f'{data=}\n{inputs=}\n{outputs=}')
    • data=   NumRooms Alley   Price
      0       NaN  Pave  127500
      1       2.0   NaN  106000
      2       4.0   NaN  178100
      3       NaN   NaN  140000
      inputs=NumRooms Alley
      0       NaN  Pave
      1       2.0   NaN
      2       4.0   NaN
      3       NaN   NaN
      outputs=
      0    127500
      1    106000
      2    178100
      3    140000
      Name: Price, dtype: int64
      

数值化

  • 由于“巷子类型”(“Alley”)列只接受两种类型的类别值“Pave”和“NaN”,pandas可以自动将此列转换为两列“Alley_Pave”和“Alley_nan”。

    • 巷子类型为“Pave”的行会将“Alley_Pave”的值设置为1,“Alley_nan”的值设置为0。
    • 缺少巷子类型的行会将“Alley_Pave”和“Alley_nan”分别设置为0和1。
  • pd.get_dummies(inputs, dummy_na=True)
    
    •    NumRooms  Alley_Pave  Alley_nan
      0       NaN           1          0
      1       2.0           0          1
      2       4.0           0          1
      3       NaN           0          1
      
    • 这就将Alley(包括字符型和NaN)变为Alley_Pave和Alley_nan两个都是数值类型的字段

插值处理NaN数值化

  • mean=inputs.mean(numeric_only=True)inputs = inputs.fillna(mean)
    print(inputs)
    
    •    NumRooms  Alley_Pave  Alley_nan
      0       3.0           1          0
      1       2.0           0          1
      2       4.0           0          1
      3       3.0           0          1
      
  • inputs = pd.get_dummies(inputs, dummy_na=True)
    print(inputs)
    
    • [现在inputs中的所有条目都是数值类型,它们可以转换为张量格式。]
  • inputs.values
    
    • array([[3., 1., 0.],[2., 0., 1.],[4., 0., 1.],[3., 0., 1.]])
      

其他get_dummies例

  • print(pd.get_dummies(inputs))
    
    •    NumRooms  Alley_Pave
      0       NaN           1
      1       2.0           0
      2       4.0           0
      3       NaN           0
      
  • pd.get_dummies(inputs["Alley"])
    
    •    Pave
      0     1
      1     0
      2     0
      3     0
      
  • pd.get_dummies(inputs["Alley"],dummy_na=True)
    
    •    Pave  NaN
      0     1    0
      1     0    1
      2     0    1
      3     0    1
      
  • pd.get_dummies(data['Price'])
    
    •    106000  127500  140000  178100
      0       0       1       0       0
      1       1       0       0       0
      2       0       0       0       1
      3       0       0       1       0
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_274037.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WSO2 Apim Message Mediation (Api Policies)

WSO2 Apim Message Mediation 1. 版本区别2. 客制化2.1 Wso2 Integration Studio Install2.2 New Sequence2.3 测试

Element table组件内容\n换行解决办法

项目使用<el-table>组件 <el-table :data"warnings" :row-class-name"highlightRow" v-loading"isLoading"> <el-table-column label"ID" prop"id"/> <el-table-column label"时间" pro…

VS2022 webapi SQLite EFcore 最简单部署

一、我有一个sqlite单文件数据库&#xff0c;里面有一张表material&#xff0c;我想把这张表的数据&#xff0c;让c# webapi程序从服务器上输出成json,让客户端可以查询到数据。二、使用VS2022&#xff0c;安装ASP.net相关开发组件。三、VS2022中新建一个项目&#xff0c;项目的…

VMvare-linux没有图形化界面

镜像&#xff1a; linux centos7.5 软件&#xff1a;vmware 安装过程&#xff1a;基本一路默认 问题&#xff1a;安装成功后&#xff0c;只有命令行&#xff0c;没有图形界面 解决办法如下&#xff1a; 1、检测yum是否可以使用 yum list | tail2、开始安装 yum groupins…

前端git必备技能,如何合并分支以及出现合并冲突后如何解决

文章目录一、合并分支二、可能出现的冲突和解决三、过程分享一、合并分支 注意&#xff0c;我们常说的master或main主干也可以理解为分支&#xff0c;可以是分支合并到主干&#xff0c;或分支合并到分支。 需求&#xff1a;cloudweb的2.6.0和2.6.1是并行开发的&#xff0c;现…

【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件

在 这篇文章 中学习了使用 PetaLinux 定制 Linux 的方法&#xff0c;制作了 SD 卡启动文件&#xff0c;本期介绍如何使用 PetaLinux 配置生成从 QSPI Flash 启动的 Linux 镜像文件。 复制 Petalinux 工程 如果我们想保留 SD 卡启动的 Petalinux 工程&#xff0c;但是又不想新…

晶晨S905D3切换到外部phy方法

文章目录 前言一、s905d3的以太网驱动的理解二、修改设备树注意前言 随着芯片的国产化推荐,越来越多的国产芯片被大家重视起来,但是国产的一些稍微高性能的芯片资料太少,这里把调实phy的流程记录一下,不做太多的理论分析 一、s905d3的以太网驱动的理解 如果拿到sdk后,默…

2023年湖北武汉市中高级职称评审要满足哪些硬性要求?启程别

2023年湖北武汉市中高级职称评审要满足哪些硬性要求&#xff1f;启程别 职称评审是指已经经过初次职称认定的专业技术人员&#xff0c;在经过一定工作年限后&#xff0c;在任职期内完成相应的继续教育学时&#xff0c;申报中级职称以上的人员须在专业期刊发表论文并且经过一些基…

存储管理 - 磁盘结构及调度算法

一.简介柱面&#xff1a;一个磁盘所有的盘面上同一个半径相同的磁道的圆形轨迹从上倒下依次组成一个圆柱体&#xff0c;就称作柱面&#xff0c;每个圆柱上的磁头由上而下从“0”开始编号。扇区&#xff1a;硬盘的读写以扇区为基本单位&#xff0c;而操作系统则以块为最小单位(扇…

图像基本变换

缩放与裁剪裁剪图像的裁剪&#xff0c;是指将图像的某个区域切割出来。一些常见的应用场景包括&#xff1a;* 感兴趣区域提取* 去除无用信息* 图像增强* 纠偏&#xff1a;去除不规则部分&#xff0c;将图像变得更加整齐事实上&#xff0c;图像裁剪的裁剪通常就是一个numpy矩阵切…

湖科大嵌入式实验课配套的stem32开发板使用说明

前言 本文档为湖科大嵌入式实验课配套的stem32开发板使用说明 这门课叫嵌入式系统及应用 大三下开课 板子长这样 感谢 lcw 的指导&#xff0c;让我少走弯路 安装 打开百度网盘链接 下载并安装keil 5 (MDK535.EXE) mdk518.exe应该也可以用&#xff0c;而且这个也可以汉化…

2022年18个值得期待的Learndash LMS插件列表

有数百个独特的LearnDash附加组件&#xff0c;您可能很难选择您的LearnDash LMS所需的。您可以集成 LearnDash 以扩展或限制功能&#xff0c;但您喜欢它。但真正的问题是如何为您的网站选择合适的插件&#xff1f;为了帮助简化此过程&#xff0c;我们精选了18个最值得期待的Lea…

git 分支创建、切换和合并

1.理解分支为了便于理解&#xff0c;大家可以粗略的将分支认为就是一个代码的副本。如果我们同时在一个代码上开发多个功能。还要修改一些bug&#xff0c;团队成员协作过程中&#xff0c;必然会出现相互影响。假如某个同事提交了一个错误的代码&#xff0c;可能会导致其他更新了…

设计循环队列(LeetCode)题目

这个也是力扣的题目&#xff0c;所以我们还是直接看 请自己看题目 下面就看思路吧&#xff0c;首先是循环队列&#xff0c;我们想一下循环队列如何设计&#xff0c;用什么设计比较好一点&#xff0c;用顺序表还是链表 这里用链表看起来比较简单&#xff0c;因为他是循环的&am…

干货|小白1分钟搞懂SRM管理系统

SRM管理系统是用来管理供应商&#xff0c;以及采购方和供应商进行采购交易的一套管理系统&#xff0c;在很多生产类企业中&#xff0c;往往是需要和ERP管理系统集成使用。原因&#xff1a;1.ERP管理系统无法实现采购商与供货商的有效协作&#xff1b;2.SRM管理系统对供应商的管…

Java分布式事务(七)

文章目录&#x1f525;Seata提供XA模式实现分布式事务_业务说明&#x1f525;Seata提供XA模式实现分布式事务_下载启动Seata服务&#x1f525;Seata提供XA模式实现分布式事务_搭建聚合父工程构建&#x1f525;Seata提供XA模式实现分布式事务_转账功能实现上&#x1f525;Seata提…

考研复试7 汇编语言、编程语言

一、寄存器 1. 寄存器概述 &#xff08;1&#xff09;典型的CPU包括器件 运算器控制器总线&#xff1a;内部总线实现CPU内部各个器件之间的联系&#xff1b;外部总线实现CPU和主板上其它器件的联系。 &#xff08;2&#xff09;8086CPU有14个寄存器&#xff0c;它们的名称为…

git查漏补缺之 stash

git查漏补缺之 stash Start 最近在工作的过程中&#xff0c;遇到 git 中的stash 暂存这个命令&#xff0c;感觉非常有用&#xff0c;写一个博客记录一下。 1. stash 首先第一个就是 stash &#xff0c;英译过来的意思就是 存放/贮藏。 主要的使用场景&#xff1a; 我正在…

最好用的Markdown编辑器:MWeb Pro mac

MWeb pro Mac中文版是一款非常好用的Markdown编辑器和博客生成工具&#xff0c;支持语法高亮&#xff0c;预览&#xff0c;Fenced code blocks和代码高亮&#xff0c;Math ML支持&#xff0c;具有导出HTML/PDF&#xff0c;自定编辑器主题&#xff0c;字数统计&#xff0c;大纲视…

Linux--MySQL数据库的基本概念、编译安装以及MySQL数据库自动补全功能的实现

文章目录一.数据库的基本概念1、数据&#xff08;Data&#xff09;2、表3、数据库4、数据库管理系统&#xff08;DBMS&#xff09;5、数据库系统6、访问数据库的流程二.数据库系统发展史1、第一代数据库2、第二代数据库3、第三代数据库三、当今主流数据库介绍1、SQL Server (微…