当前位置: 首页 > news >正文

使用pandas进行数据快捷加载

导读:在已经准备好工具箱的情况下,我们来学习怎样使用pandas和NumPy对数据进行加载、操作、预处理与打磨。

让我们先从CSV文件和pandas开始。

pandas库提供了最方便、功能完备的函数,能从文件(或URL)加载表格数据。默认情况下,pandas会将数据存储到一个专门的数据结构中,这个数据结构能够实现按行索引、通过自定义的分隔符分隔变量、推断每一列的正确数据类型、转换数据(如果需要的话),以及解析日期、缺失值和出错数据。

我们将从导入pandas包和读取Iris数据集开始:

In:import pandas as pd
Iris_filename=’datasets-uci-iris.csv’
Iris=pd.read_csv(iris_filename,sep=’_’,decimal=’_’,heade=None,
                 names=[‘sepal_length’,‘sepal_width’
                        ‘petal_length’,‘petal_width’
                        ‘target’])

通过上面的命令,可以指定文件名、分隔符(sep)、小数点占位符(decimal)是否有标题(header)以及变量名称(使用names和列表)。分隔符和小数点占位符的默认设置为sep=',' 和decimal='.',在上面的函数中这些设置显得有些多余。但是,对于欧洲格式的CSV文件需要明确指出这两个参数,这是因为许多欧洲国家的分隔符和小数点占位符都与默认值不同。

如果数据集不能在线使用,可以按照如下步骤从互联网上下载:

In:import urllib
  url=”http://aima.cs.berkeley.edu/data/iris.csv”
  set1=urllib.request.Request(ur1)
  iris_p=urllib.request.urlopen(set1)
  iris_other=pd.read_csv(iris_p,sep=',',decimal='.', 
        header=None, names=[‘sepal_length’,‘sepal_width’                                                                                                                 
                            ‘petal_length’,‘petal_width’
                                             ‘target’ ])
  iris_other.head()

由此产生的对象是一个名为iris的pandas数据框(DataFrame)。它不是一个简单的Python列表或字典。为了对其内容有一个粗略的概念,使用如下命令可以输出它的前几行(或最后几行):

In:iris.head()

 

输出数据框的前五行,如下所示:

In:iris.tail()

调用此函数,如果不带任何参数,将输出五行。如果想要输出不同的行数,调用函数时只需要设置想要的行数作为参数,格式如下:

 In:iris.head(2)

上述命令只输出了数据的前两行。现在,为了获得每列的名称,可以使用如下代码获得列名:

 In:iris.columns
out:Index([‘sepal_length’,‘sepal_width’             
          ‘petal_length’,‘petal_width’                            
          ‘target’ ],dtype=‘object’ )

这次生成的对象非常有趣,显然它看起来像一个列表,但实际上是一个pandas索引。可以从对象的名称猜测,它表示的是列的名称。例如,要提取“target”列,简单地按如下方式就可以做到:

 

In:y=iris[‘target’ ]
   y


Out:0 Iris-setosa
    1 Iris-setosa
    2 Iris-setosa
    3 Iris-setosa
    ...
    149 Iris-virginica
    Name:target,dtype:object

对象y的类型是pandas series,可以把它看成是具有轴标签的一维数组,稍后我们会对它进行深入研究。现在,我们只需要了解,pandas索引(Index)类就像表中列的字典索引一样。需要注意的是,还可以通过索引得到列的列表,如下所示:

 

In:x =iris[[ ‘sepal_length’,‘sepal_width’ ]]


  x
Out:[150 rows x 2 columns]

以下是X数据集的前4行数据:

 

以下是X数据集的后4行数据:

在这个例子中,得到的结果是一个pandas数据框。为什么使用相同的函数却有如此大的差异呢?那么,在前一个例子中,我们想要抽取一列,因此,结果是一维向量(即pandas series)。在第二个例子中,我们要抽取多列,于是得到了类似矩阵的结果(我们知道矩阵可以映射为pandas的数据框)。新手读者可以简单地通过查看输出结果的标题来发现它们的差异;如果该列有标签,则正在处理的是pandas 数据框。否则,如果结果是一个没有标题的向量,那么这是pandas series

至此,我们已经了解了数据科学过程中一些很常见的步骤。加载完数据集之后,通常会分离特征和目标标签。目标标签通常是序号或文本字符串,指示与每一组特征相关的类别。

然后,接下来的步骤需要弄清楚要处理的问题的规模,因此,你需要知道数据集的大小。通常,对每个观测计为一行,对每一个特征计为一列。

为了获得数据集的维数,只需在pandas数据框和series上使用属性shape,如下面的例子所示:

In:print (X.shape)
Out:(150,2)
In:print (y.shape)
Out:(150,)

得到的对象是一个包含矩阵或数组大小的元组(tuple),还要注意的是pandas series也遵循相同的格式(比如,只有一个元素的元组)。

 

本文摘编于《数据科学导论:Python语言(原书第3版)》

 

数据科学快速入门指南,全面覆盖进行数据科学分析和开发的所有关键要点

本书对上一版内容进行了全面扩展和更新,将帮助你使用常见的Python库成功地进行数据科学操作。本书提供了对Python核心软件包的前沿见解,包括新版的Jupyter Notebook、Numpy、pandas和Scikit-learn等。 

本书提供大量详细的示例和大型混合数据集,可以帮助你掌握数据收集数据改写分析可视化活动报告等基本统计技术。此外,书中还介绍了机器学习算法、分布式计算、预测模型调参和自然语言处理等高级数据科学主题,还介绍了深度学习梯度提升方案(如XGBoost、LightGBM和CatBoost)等内容。 

通过本书的学习,你将全面了解主要的机器学习算法图分析技术以及所有可视化工具和部署工具,使你可以更轻松地向数据科学专家和商业用户展示数据处理结果。 

通过阅读本书,你将学到: 

  • 在Windows、Mac和Linux系统上安装数据科学工具箱 

  • 使用Scikit-learn库提供的核心机器学习方法 

  • 通过数据操作、修复和探索来解决数据科学问题 

  • 学习先进的数据探索和操作技术 

  • 优化机器学习模型,以获得最佳性能 

  • 进行图的探索和聚集分析,充分利用数据中的联系和连接

点击链接了解详情并购买

更多精彩回顾

书讯 |9月书讯(下)| 开学季,读新书

书讯 |9月书讯(上)| 开学季,读新书

资讯 |TIOBE 9 月编程语言:C++ 突起、Java 流行度下降

上新 | Webpack优化——将你的构建效率提速翻倍
书单 | 开学季——计算机专业学生必读的10本畅销经典

干货 | 为什么Spark能成为最火的大数据计算引擎?它是怎样工作的?

收藏 | 红帽资深解决方案架构师魏新宇:云原生应用构建之路

视频 | 大佬出镜推荐不可不读系列——程序员陈彼得

赠书 |【第21期】以实际项目作驱动,换种方式学Java

点击阅读全文购买

相关文章:

  • 大数据必备的十大工具
  • SpringBoot基于jar包启动核心原理及流程详解
  • 【第22期】网络安全在身边|最强学习书单整理
  • 从“新基建”重新认识数据中心
  • 还在为面试被问JVM发愁?来看看阿里P7大佬的JVM笔记吧
  • 从“判断力”到“创造力”:GAN在图像生成上的应用
  • Istio进入1.7版本,Service Mesh 落地还有什么障碍?
  • 开源搜索引擎排名第一,Elasticearch是如何做到的?
  • 创客教育:青少年软体机器人制作的实践与探索
  • 架构师的成长之路
  • 区块链应用开发实战 | Dapp开发专业指南
  • RPA 如何赋能金融行业数字化转型?
  • 【第23期】令人舒心又伤脑的12张数学原理动图!你能看懂几个
  • 数据仓库、数据集市、数据湖、数据中台到底有什么区别?都得做吗?
  • 初学者指南:什么是算法?11行伪代码给你讲明白
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • SegmentFault for Android 3.0 发布
  • __proto__ 和 prototype的关系
  • dva中组件的懒加载
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • es6--symbol
  • java第三方包学习之lombok
  • Logstash 参考指南(目录)
  • Spring Boot MyBatis配置多种数据库
  • sublime配置文件
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 订阅Forge Viewer所有的事件
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 我与Jetbrains的这些年
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • C# - 为值类型重定义相等性
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 组复制官方翻译九、Group Replication Technical Details
  • ​一些不规范的GTID使用场景
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #微信小程序:微信小程序常见的配置传旨
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (07)Hive——窗口函数详解
  • (1)bark-ml
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2015)JS ES6 必知的十个 特性
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)WLAN定义和基本架构转
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Linux整合apache和tomcat构建Web服务器
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET多线程执行函数
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET轻量级ORM组件Dapper葵花宝典