系列文章目录

第1天:读入数据
第2天:read()、readline()与readlines()
第3天:进度条(tqdm模块)
第4天:命令行传参(argparse模块)
第5天:读、写json文件(load()、loads()、dump()、dumps())
第6天:os模块、glob模块
第7天:pandas.DataFrame
第8天:DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())


python数据分析学习第9天记录

  • 系列文章目录
  • 前言
  • 一、今天所学的内容
  • 二、知识点详解
    • 2.1 将值转换为属性/特征
    • 2.2 数据合并、连接(merge,join,concat)
      • 2.2.1 merge()
      • 2.2.1 join()
      • 2.2.3 concat()
  • 总结

前言

昨天我们学习了pandas模块中DataFrame的三种基本数据处理操作,并给出了实例。今天继续学习pandas模块下对数据处理的另外两种操作:

  • 将值转换为属性/特征
  • 数据合并、连接(merge,join,concat)

一、今天所学的内容

主要内容为pandas模块如何对DataFrame这一数据类型进行将数据输入模型前的预处理工作。

二、知识点详解

2.1 将值转换为属性/特征

在进行数据分析的过程中我们常常需要将值转换为属性或者特征。比如,会将性别这一列会出现的两个值:“男”、“女”转换成0和1,便于后续数据模型的分析与操作。

那么接下来我们就分析一下离散特征的编码。什么是离散特征(变量)呢?简单来说,就是指其数值只能用自然数、整数、计数单位等描述的数据。例如,职工个数(总不能是1.2个吧),成绩A+等。

那么离散特征的编码分为两种情况:
1、离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码
2、离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3}
本文先讲解取值之间没有大小意义的编码方式,使用pandas可以很方便的对离散型特征进行one-hot编码。

让我们举例说明吧~

先来创建一个DataFrame:(如果这个地方忘记参数怎么设置,请参考上一篇)

import pandas as pddata = {"姓名":["张三","李四","王五","Luliu","XIAOQIQI"],"年龄":["18","20","19","20","17"],"专业":["计算机","网络工程","物联网工程","通信工程","电子"],"成绩":["95","90","88","89","93"]
}df = pd.DataFrame(data, index = ["1","2","3","4","5"],columns = ["姓名","年龄","专业","成绩"])print(df.head())

上面这段代码定义了一个pandas的DataFrame。现在我们要对“专业”这一列进行编码。

y = pd.get_dummies(df.专业, prefix='专业')
print(y.head())

执行结果如下:

结果图的上半部分是原始数据,下面是对专业这一属性进行编码的结果。
get_dummies 是利用pandas实现one hot encode的方式。详细参数请查看官方文档吧~

这里插播一句,代码执行结果可能看起来不太美观,因为是直接在终端执行的。如果追求更清晰更美观的结果展示,可以用vs code最近支持的jupyter notebooks。配置很方便,很好用。接下来我会专门更新一篇配置方式与基本使用。

继续讲解属性编码。在对特定的列:”专业“ 编码后,可以将其合并到元数据中。

合入代码如下:(pd.join()下面讲到,不熟悉的 同学可以先看下面内容,再回过头来看这里)

df = df.join(pd.get_dummies(df.专业))

合入结果就是这样啦:

是不是很简单~

2.2 数据合并、连接(merge,join,concat)

在数据处理的过程中,常常需要对数据进行连接、合并操作。这一小节就来说说数据拼接那些事儿。

首先我们来了解三个函数的用法,在过程中学会数据合并和连接:merge()、join()、concat()。

2.2.1 merge()

pandas提供了一个类似于关系数据库的连接(join)操作的方法merage,可以根据一个或多个键将不同DataFrame中的行连接起来
语法如下:

merge(left, right, how='inner', on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True,suffixes=('_x', '_y'), copy=True, indicator=False)

用于通过一个或多个键将两个数据集的行连接起来,类似于 SQL 中的 JOIN。

该函数的典型应用场景是:针对同一个主键存在两张包含不同字段的表,现在我们想把他们整合到一张表里。在此典型情况下,结果集的行数并没有增加,列数则为两个元数据的列数和减去连接键的数量。

只看函数语法的话会觉得过于复杂,我刚开始学习的时候也有点懵。不过其实掌握这个函数最常见的方法就可以了。

为了使用df.merge() ,我们需要再定义一个dataframe:

df2 = pd.DataFrame({'姓名':['XIAODUDU','皮卡丘','王麻子',"张三","李四"],
'年级':[1,2,3,4,5]})

可以从构造的 新数据看出,我们定义了姓名到年级的一个映射,在姓名这个列表中又定义了五个人,与之定义了每个人的年级。如果这时候将df2与之前定义的df做merge操作,我们使用不加任何参数的函数对其进行处理:

df3 = pd.merge(df,df2)
print(df3)

此时打印结果为:

也就是说,df.merge()在默认情况下是对两个dataframe中都有的列进行属性值的相同查询,如果 属性值相同,则将该行打印到新的dataframe。所以我们先定义的df和后定义的df2在“姓名”这一列中属性值的交集为:[“张三”, ‘李四“’],所以python会自动将这两行的内容整合到新的dataframe中。

那么到这里我们初步掌握了df.merge()。此时也许还是没办法解决同学们的需求,也许两个初始的dataframe中相同索引值的属性列不值一列,那么到时候按照哪个键值来进行排序,都是可以选择的。预知后事如何,请听下次分解!~

2.2.1 join()

join方法提供了一个简便的方法用于将两个DataFrame中的不同的列索引合并成为一个DataFrame。函数语法如下:

join(self, other, on=None, how='left', lsuffix='', rsuffix='',sort=False):

直接看函数语法看不出太多东西。很多知识都需要反复实践才能记得更牢固。因此,也是举一个pd.join()的例子吧~

首先还是定义一个新的dataframe。先来回顾一下原来的数据:

我们先定义一个与上面数据毫不相关的的dataframe:

df3 = pd.DataFrame({'面积':['122','78','135',"88","64"],
'年级':[1,2,3,4,5]})df4 = df.join(df3)
print(df4)

运行结果如下:

毫无灵魂的数据合并呐!

所以两个dataFrame不能完全不相干。那么应该怎样定义两个数据dataFrame才可以使用join函数呢?

经过多角度学习,我觉得总结的不错的博客摘抄如下(链接地址:http://www.srcmini.com/30938.html,侵删):

当我们想要串联我们的DataFrame时, 我们可以通过垂直或并排堆叠它们来相互添加。组合这些DataFrame的另一种方法是在每个数据集中使用包含公用值的列。使用公共字段组合DataFrame的方法称为”连接”。我们用于组合DataFrame的方法是join()方法。包含公用值的列称为”联接键”。

当一个DataFrame是一个查找表, 其中包含添加到另一个DataFrame中的其他数据时, join()方法通常很有用。这是一种方便的方法, 可以将两个索引不同的DataFrame的列合并为一个DataFrame。

也就是说,要想发挥join()的作用,必须在两张dataFrame查找表中的数据是有重叠部分的。

所以我们再举一个可以使用join()函数的例子,来演示一下join()函数的工作方式:

import pandas as pd
df1 = pd.DataFrame({'姓名': ['XIAODUDU','皮卡丘','王麻子',"张三","李四"], '年级':[1,2,3,4,5]})
df2 = pd.DataFrame({'姓名': ["张三","李四","王五","Luliu","XIAOQIQI"], "成绩":["95","90","88","89","93"]})
df_join = df1.join(df2.set_index('姓名'), on='姓名')print(df_join)

结果如下:

是不是稍微理解了join()函数的工作方式?可以看出,上面姓名这一列是按照df1的属性值来罗列的。我们也可以让连接结果显示两个dataframe中某一列的并集,或者按照df2的姓名的属性值罗列。怎么做到呢?
取决于两个参数:
lsuffix:它是指具有默认值””的字符串对象。它使用左框架重叠列中的后缀。

rsuffix:它是指一个字符串值, 其默认值为””。它使用右框架重叠列中的后缀。
我们执行下面这行代码:

print(df1.join(df2, lsuffix='_df1', rsuffix='_df2'))

执行结果如下:

可以看到, 当我们定义了lsuffix、rsuffix时,会将这两张表机械地连接在一起。好了,join()函数就先简单介绍到这里啦。

2.2.3 concat()

concat()的用法先简单举一个例子吧:

df_concat = pd.concat([df1,df2])
print(df_concat)

结果如下:

可以看出就是单纯地把两个dataframe连接在了一起。至于加上参数的变形,则需要认真阅读一下pandas这部分的官方文档啦。

总结

昨天对DataFrame的三种基本操作进行了学习,今天介绍了DataFrame的两种数据处理基本操作: 将值转换为属性/特征、数据合并/连接操作。
那么今天就到这里了,明天继续为大家带来DataFrame的数据处理操作。list如下:

  • 排序,排名
  • 索引重置

祝大家变得更强,明天见!

今天的小tips:

  • 运动是一项坚持一段时间就会爱上的习惯。每天锻炼一会儿,也会让大脑更活跃。

Python数据分析【第9天】| DataFrame的属性编码、数据合并和连接(get_dummies,merge,join,concat)相关推荐

  1. python 数据分析day4 Pandas 之 DataFrame

    DataFrame 一. 创建DataFrame 1. 二维数组创建 2. 字典创建 3. JSON创建 4. 读取Excel或CSV文件创建 5. 读数据库(MySQL)创建 二. 常用属性 三. ...

  2. Python 数据分析三剑客之 Pandas(十):数据读写

    CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...

  3. Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换

    CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...

  4. 视频教程-Python数据分析与案例教程:分析人口普查数据-Python

    Python数据分析与案例教程:分析人口普查数据 多年互联网从业经验: 有丰富的的企业网站.手游.APP开发经验: 曾担任上海益盟软件技术股份有限公司项目经理及产品经理: 参与项目有益盟私募工厂.睿妙 ...

  5. Python数据分析与案例教程:分析人口普查数据-欧阳桫-专题视频课程

    Python数据分析与案例教程:分析人口普查数据-379人已学习 课程介绍         本课程将带你全程实现对全国第六次人口普查数据的获取.分析.及可视化图表的制作 课程收益     熟悉和掌握使 ...

  6. R语言使用data.table包的merge函数对两个dataframe数据进行全连接(full join)

    R语言使用data.table包的merge函数对两个dataframe数据进行全连接(full join) 目录 R语言使用data.table包的merge函数对两个dataframe数据进行全连 ...

  7. Python数据分析——pandas数据结构(DataFrame)

    一.pandas数据结构–DataFrame DataFrame 是表格型的数据结构,每列值的数据类型可以不同,也可以相同 DataFrame 常用于二维数据. DataFrame 的属性: valu ...

  8. Python数据分析——Pandas基础:dt.datetime与pivot_table()数据透视表

    系列文章目录 Chapter 1:创建与探索DF.排序.子集化:Python数据分析--Pandas基础入门+代码(一) Chapter 2:聚合函数,groupby,统计分析:Python数据分析- ...

  9. python数据分析年薪百万_年薪百万的BI数据分析师究竟厉害在哪里?

    前几天有一个截图被大家广泛传播,标题是"普适性职业生涯",内容如下: 虽然大家看完都会笑一笑,但是最后却不得不接受一个事实: 很多人在职场里,会随着年龄增长,变得越来越平庸,而不是 ...

最新文章

  1. css对称旋转,CSS3 transform平面旋转
  2. Cissp-【第3章 安全工程】-2021-2-20(248页-268页)
  3. Linux之特殊权限(SUID/SGID/SBIT)
  4. mysql timestamp 插入null报错_读MySQL 5.7文档11.2 Date and Time Data Types总结
  5. MyBatis二级缓存的配置
  6. 前端学习(2596):后台系统的权限控制和管理--刷新页面消失
  7. 2015年下半年《软件评测师》下午试卷及答案
  8. iOS-启动动态页跳过设计思路
  9. PAT1008数组元素循环右移问题(2,3测试点不过的解决办法)
  10. Win10无法访问Ubuntu18.04的smb解决
  11. c# 委托和委托事件
  12. python日期模块datetime常用操作总结(字符串与datetime对象互转、日期差值计算、时间戳获取、时间数组生成等)
  13. html+css+js实现小游戏flybird(完整版)
  14. 用数学语言说我爱你怎么说_你会说我的语言吗
  15. android版本内存卡,都8GB内存了 为何安卓手机还是这么卡?
  16. Linux的系统安全及管理
  17. 免费国产化Hypervisor系统安装
  18. ElasticSearch索引基本操作POST PUT GET DELETE
  19. Solidworks设计电路外形导入AltiumDesigner
  20. 项目4.1穷举法-百元买百鸡

热门文章

  1. css使用font-face引入阿里图标库的图标 - Kaiqisan
  2. 聊一聊在线视频剪辑工具
  3. 概率论笔记 第4章 随机变量的数字特征
  4. 解析IAR的ILINK链接器icf文件(转)
  5. echarts 2D地图3D效果(附:山东省市地图——济南莱芜合并)
  6. 盘点2020最容易被盗的密码!为什么号容易被盗?这就是原因
  7. win电脑被安装垃圾软件后在注册表哪里卸载?
  8. messenger未能连接到服务器,BTS Messenger 2连接服务器失败_九游手机游戏
  9. Linux配置发送邮件
  10. 如何自学图像编程(转)