热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pandas取第一行数据_Python数据科学实践|Pandas1

大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧。本期内容主要由智亿同学与政委联合推出。Q:经过上一章的学习,大家应该已
edcd4cb97bed29b43366034d174836c7.gifd104afcec8293a8c09c2027bbb9719b6.png

7b71a6d515ffccbfaa5bafca3b3548de.png

大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧。本期内容主要由智亿同学与政委联合推出。

Q:

经过上一章的学习,大家应该已经熟悉了火锅团购数据与团购的业务。我相信大家也可以读入火锅团购数据了。那么数据科学的下一步是什么?

A:

清洗与处理数据,即把数据处理成,我们想要的样子。Python提供了一个强大的库,叫做Pandas,帮我们完成这一步骤。值得提及的是,Pandas的开发者都声称,其实是模仿R语言中的DataFrame的数据结构构建的Pandas。所以熟悉R语言的小伙伴会有似曾相识的感觉。

首先,小伙伴们可别小瞧了数据清洗,以为“数据科学”只和那些“高大上”的模型有关。实际上,在完整的数据分析的项目中,数据清洗和预处理上占的时间往往在80%左右,剩下的20%才是数据建模(毕竟好多时候都会先使用,经过大量实践证明效果好的成熟模型,往往几行代码搞定)。所以,掌握了Pandas,你的“Python数据科学之路”才算是启程了。

其次,学习Pandas可不容易,Pandas的官方文档的页数有将近2000页。初学时,学了后面忘了前面是常有的事情。为此,这一章只讲解在实际项目中最最常用的一些函数与思想,学完后,至少能完成80%的数据清洗工作。

最后,不要忘记政委是个公认的吃货,尤爱火锅烧烤。这两天可犯了愁:熊大过两天就要来西安考察工作,亟需找个高端大气上档次的饭馆!可是饭馆这么多,怎么挑个合适的!正犯愁呢,政委灵机一动:赶紧翻出上一章使用的火锅团购数据,正好可以用Pandas分析分析,找到性价比最高能够招待熊大的饭馆,打开Jupyter就开干!

4d57ad47b835c883303a05b82d6c2dd5.png初级篇—相遇Pandas

本期,我们将学会:

  • 学习如何使用Pandas读入csv、excel文件

  • 学习如何使用Pandas过滤重复值、缺失值

c5139d8ed52f2e522b6de6fe0ae4c436.gif1、读入数据—数据分析的"米"

首先,做数据分析第一步是获取数据。俗话说,巧妇难为无米之炊。在数据分析领域,数据就是我们的“米”。获取数据的途径有两种:1. 使用爬虫从互联网上爬取数据;2. 从现有数据库中下载。本章假设火锅团购数据是现成的,所以直接读入数据即可,后续章节会讲解如何爬取现有的火锅团购数据。

表1 读入文件函数说明

e9307410af068a8033f30cdbd6fbe982.png

例1 读入文件

1import pandas as pd # 导入Pandas模块
2raw_data=pd.read_excel("https://github.com/xiangyuchang/xiangyuchang.github.io/blob/master/BearData/shops_nm.xlsx?raw=true") #读入数据
3print('数据的维度是:', raw_data.shape) #返回值为(699,9)
4raw_data.head() #查看数据的前5行

运行结果如图1:

82f7a8ba86c1292dc67c66152cdb268d.png

图1 读入文件运行结果

在这里,使用了pandas.read_excel()读入excel文件,并输出前5行观察数据。如果想打开csv文件,则需要使用pandas.read_csv()即可。

fd6f0d3c090ce9f5432a66d98f5e32be.gif

敲黑板:CSV文件的编码格式默认为UTF8,但是Office的CSV文件的编码不是UTF8,而是GBK,使用时需要注意。大家可以使用encoding参数修改编码。

fd6f0d3c090ce9f5432a66d98f5e32be.gif

Pandas常用的基本数据结构主要是两类:SeriesDataFrame

什么是DataFrame呢?所谓DataFrame,就是类似于Excel那样,如图2所示的具有行和列两个维度的特殊数据结构。肯定有人会认为这不就是矩阵吗?这里需要大家仔细去思考,真实业务场景面对的数据是如上图导入的火锅团购数据的结果一样。第一列店名是文本;第四列评分是数字。所以,这与矩阵等平时被使用的结构的区别就在于,每一列的数据类型要相同,但是不同列可以不同。基于这个理念,可以通过构建字典或数组的方式生成DataFrame。其实在上面的例子中,读入的数据就已经被自动转换成DataFrame了。

fdc7b4abc6ea2ee1faad37b80982b86c.png

图2 DataFrame数据结构

什么是Series呢?所谓Series,简单理解,就是DataFrame中的一列(并不完全准确,但可以这么理解,见图3)。

897f02ce62ed52eb266a0ce8df2226b4.png

图3 Series数据结构

c5139d8ed52f2e522b6de6fe0ae4c436.gif2、检查重复—重复的东西咱不要

获取到的原始数据往往存在各种问题,最容易解决的是:重复值。为什么会有重复值存在?就互联网上获取到的数据而言,可能是商家付了一笔不菲的“流量费”,平台在多个位置展示同一商家的信息,这样商家有更大概率获取流量。好奇的宝宝可以进入“大众点评”、“美团”、“百度糯米”随意查看。

把数据读入后,第一步要做的是检查数据重复、缺失的情况。对于重复值,直接剔除即可;对于缺失值,可采用剔除缺失值或插值法填充数据。

表2 判断、丢弃重复值函数说明

98db56cf837a3650a54cf6714eb2611f.png

例2 判断、丢弃重复值

1# 判断是否存在完全一致的数据行
2duplicated_data = raw_data[raw_data.duplicated() == True]
3if len(duplicated_data) == 0:
4    print('不存在完全一致的数据行')
5else:
6    print(duplicated_data)

运行结果:不存在完全一致的数据行。那么,现在制造一个完全重复的数据行。我们把数据框中的第一行赋值给第二行。

1print(raw_data.iloc[0,:])
2raw_data.iloc[1,:] = raw_data.iloc[0,:]

其显示结果为:

6e397a64f569a916202c353c4cfb6d36.png

大家可以再次运行前一部分的代码块,它就能帮你自动发现第二个商户的信息与第一个商户完全相同。同样的方式,可以检查店名是否有重复的。显然只有第二个商户是我们赋值的重复信息,所以返回值为“老北京帅羊肉”。

1# 判断是否存在重复的店名
2duplicated_shops = raw_data['店名'][raw_data['店名'].duplicated() == True]
3if len(duplicated_shops) == 0:
4    print('不存在重复的店名')
5else:
6    print(duplicated_shops)   
7# 返回值为:老北京刷羊肉

下面终于要drop_duplicates函数出场了。

1# 等价于raw_data = raw_data[raw_data['店名'].duplicated() == False]
2drop_duplicates_shops = raw_data.drop_duplicates(subset=['店名'])
3drop_duplicates_shops.head()

其运行结果返回了去重后的商户信息列表。

7ac1aa8ef169756360d3004329b28282.png

综上所述,数据框中的数据去重的方法为:首先通过duplicated()方法判断是否存在重复行,再通过Pandas特有的判断表达式就可以按条件输出符合条件的数据框。注意,删除重复值可以采用drop_duplicates()方法,也可以采用“duplicated() + Pandas判断表达式”的方法,二者有相同的效果。

c5139d8ed52f2e522b6de6fe0ae4c436.gif3、判断表达式—更Pythonic

熊大马上就要下飞机到西安了。我数据分析还没做完呢,到底带他去哪里吃饭呢。干脆来个简单粗暴的,把评分最高为5分的店都找出来,然后选吧,不犹豫了。这里就要使用Pandas特有的判断表达式,先看下面这个例子:

1for i in range(len(df1)):
2    if df1[column1].iloc[i] == value1:
3        print(df1[column1].iloc[i])

可以看到,这至少需要3行代码才能完成筛选某一列的值,非常麻烦不说,而且速度也很慢。那么,有没有办法简化操作呢?这就需要用到Pandas判断表达式了。

Pandas判断表达式本质上相当于for循环+if条件判断,但开发效率和运行效率更高。最关键的是,Pandas条件表达式也可以任性组合叠加!需要注意的是,组合叠加相当于“且”的关系,而非“或”的关系。

1# 筛选某一列的值,返回符合条件的所有行
2df1[df1[column1] == value1]
3
4# 筛选某一列的值,返回符合条件的某一列
5df1[column2][df1[column1] == value1]
6
7# 筛选多列的值,返回符合条件的所有行
8df1[df1[column1] == value1][df1[column2] == value2][...]
9
10# 筛选多列的值,返回符合该条件的多列
11df1[[column1, column2]][df1[column1] == value1][...]

从上面几个例子中,Pandas的条件判断式把for循环和if判断的语句从至少3行,缩减为一行,简直是装逼神器!

最后还是来找一下带熊大吃饭的店吧。

1print(raw_data[raw_data['评分']==5])
2# 显示共有67家店铺哦,赶紧找个带熊大去。
c5139d8ed52f2e522b6de6fe0ae4c436.gif4、检查缺失—要命的缺失fd6f0d3c090ce9f5432a66d98f5e32be.gif

敲黑板:相比于重复值,我们更关心是否存在缺失值。

fd6f0d3c090ce9f5432a66d98f5e32be.gif

在过去,很多企业并不重视,或者说并没有意识到数据的重要性,对于数据的存储也仅仅是为了“存”,而非分析(这其实是在说,过去的大企业并不一定比现在的中小企业拥有更多的数据)。对数据的不重视导致存在大量的填写不规范,漏填、错填等,这些行为都会导致整一条数据无法使用或分析价值低。通过isnull()方法作用于某一列或某几列就可以判断是否为缺失值。

表3 判断缺失值

8eda042baecd65214aca10b10a391ae7.png

下面我们找一下是否有的商户的评价数是否有缺失。

例3 判断缺失值

1is_null_data = raw_data[raw_data['评价数'].isnull() == True]
2print(is_null_data)
3
4raw_data2 = raw_data[raw_data['评价数'].isnull() == False]

运行结果如图4所示。

e1312e875dae63579bb9f6802c37e7f5.png

图4 判断缺失值

我们发现,存在4条数据有大量的缺失值,直接通过Pandas的判断表达式剔除即可。剔除后,数据维度变为(695,9)。去除缺失值后的DataFrame命名为raw_data2(好宝宝不重复命名相同变量)。

77ed96d7fdec250ccf72eab7060c6213.png

好了,今天就先介绍到这里。

作业

▼往期精彩回顾▼初步搭建数据科学工作环境

Conda的使用

Spyder入门

Jupyter入门

Markdown

简单读写数据

数据类型

数据结构

控制流

函数与模块

Numpy

4fc62c65a0ed2e4734e55099834b2cf7.png

9639c19696ea55f978ce30153bc95ede.png

点击这里阅读原文



推荐阅读
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp ... [详细]
  • python机器学习之数据探索
    🐱今天我们来讲解数据建模之前需要处理的工作,也就是数据探索的过程,很多同学会说,不就是处理缺失值,异常值&# ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 动量|收益率_基于MT策略的实战分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了基于MT策略的实战分析相关的知识,希望对你有一定的参考价值。基于MT策略的实战分析 ... [详细]
  • 如何在mysqlshell命令中执行sql命令行本文介绍MySQL8.0shell子模块Util的两个导入特性importTableimport_table(JS和python版本 ... [详细]
  • 用pandas库修改excel文件里的内容,并把excel文件格式存为csv格式,再将csv格式改为html格式
    假设有Excel文件data.xlsx,其中内容为:     ID age height    sex weight张三  1  39    181 female     85李四  2  40    180   male     80王五  3  38    178 female     78赵六  4  59    1 ... [详细]
  • csv转为矩阵 python_Python可视化 | Seaborn5分钟入门(六)——heatmap热力图
    Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API ... [详细]
  • 代码如下:#coding:utf-8importstring,os,sysimportnumpyasnpimportmatplotlib.py ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
author-avatar
LA_Lam霸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有