使用pandas进行数据快捷加载
导读:在已经准备好工具箱的情况下,我们来学习怎样使用pandas对数据进行加载、操作、预处理与打磨。
让我们先从CSV文件和pandas开始。
作者:阿尔贝托·博斯凯蒂,卢卡·马萨罗
来源:华章计算机(ID:hzbook_jsj)
pandas库提供了最方便、功能完备的函数,能从文件(或URL)加载表格数据。默认情况下,pandas会将数据存储到一个专门的数据结构中,这个数据结构能够实现按行索引、通过自定义的分隔符分隔变量、推断每一列的正确数据类型、转换数据(如果需要的话),以及解析日期、缺失值和出错数据。
我们将从导入pandas包和读取Iris数据集开始:
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文件需要明确指出这两个参数,这是因为许多欧洲国家的分隔符和小数点占位符都与默认值不同。
如果数据集不能在线使用,可以按照如下步骤从互联网上下载:
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列表或字典。为了对其内容有一个粗略的概念,使用如下命令可以输出它的前几行(或最后几行):
iris.head()
输出数据框的前五行,如下所示:
iris.tail()
调用此函数,如果不带任何参数,将输出五行。如果想要输出不同的行数,调用函数时只需要设置想要的行数作为参数,格式如下:
iris.head(2)
上述命令只输出了数据的前两行。现在,为了获得每列的名称,可以使用如下代码获得列名:
iris.columns
输出:
Index([‘sepal_length’,‘sepal_width’
‘petal_length’,‘petal_width’
‘target’ ],dtype=‘object’ )
这次生成的对象非常有趣,显然它看起来像一个列表,但实际上是一个pandas索引。可以从对象的名称猜测,它表示的是列的名称。例如,要提取“target”列,简单地按如下方式就可以做到:
y=iris[‘target’ ]
y
输出:
0 Iris-setosa
1 Iris-setosa
2 Iris-setosa
3 Iris-setosa
...
149 Iris-virginica
Name:target,dtype:object
对象y的类型是pandas series,可以把它看成是具有轴标签的一维数组,稍后我们会对它进行深入研究。现在,我们只需要了解,pandas索引(Index)类就像表中列的字典索引一样。需要注意的是,还可以通过索引得到列的列表,如下所示:
x =iris[[ ‘sepal_length’,‘sepal_width’ ]]
x
输出:
[150 rows x 2 columns]
以下是X数据集的前4行数据:
以下是X数据集的后4行数据:
在这个例子中,得到的结果是一个pandas数据框。为什么使用相同的函数却有如此大的差异呢?那么,在前一个例子中,我们想要抽取一列,因此,结果是一维向量(即pandas series)。
在第二个例子中,我们要抽取多列,于是得到了类似矩阵的结果(我们知道矩阵可以映射为pandas的数据框)。新手读者可以简单地通过查看输出结果的标题来发现它们的差异;如果该列有标签,则正在处理的是pandas 数据框。否则,如果结果是一个没有标题的向量,那么这是pandas series。
至此,我们已经了解了数据科学过程中一些很常见的步骤。加载完数据集之后,通常会分离特征和目标标签。目标标签通常是序号或文本字符串,指示与每一组特征相关的类别。
然后,接下来的步骤需要弄清楚要处理的问题的规模,因此,你需要知道数据集的大小。通常,对每个观测计为一行,对每一个特征计为一列。
为了获得数据集的维数,只需在pandas数据框和series上使用属性shape,如下面的例子所示:
print (X.shape)
#输出:(150,2)
print (y.shape)
#输出:(150,)
得到的对象是一个包含矩阵或数组大小的元组(tuple),还要注意的是pandas series也遵循相同的格式(比如,只有一个元素的元组)。
本文摘编自《数据科学导论:Python语言》(原书第3版)
延伸阅读《数据科学导论:Python语言》
推荐语:数据科学快速入门指南,全面覆盖进行数据科学分析和开发的所有关键要点。
- CentOS6.5菜鸟之旅:安装输入法(小呀小企鹅)
- CSS魔法堂:选择器及其优先级
- 常见的Web实时消息交互方式和SignalR
- 【设计模式】——工厂方法FactoryMethod
- 前端翻译:Activating Browser Modes with Doctype
- JS魔法堂:doctype我们应该了解的基础知识
- CentOS6.5菜鸟之旅:安装Realtek无线网卡驱动
- CentOS6.5菜鸟之旅:U盘安装CentOS64位
- 人工智能创造新型态工作 制造业受冲击
- ASP.NET Core File Providers
- JS魔法堂之实战:纯前端的图片预览
- 域名publica.com近50万交易 买家身份浮出水面
- Vim杂记:Sublime的配色方案
- Vim杂记:markdown插件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Pycharm打开已有项目配置python环境的方法
- python cv2.resize函数high和width注意事项说明
- pytorch SENet实现案例
- python如何安装下载后的模块
- Python爬虫如何应对Cloudflare邮箱加密
- 如何使用Python处理HDF格式数据及可视化问题
- tp5框架使用composer实现日志记录功能示例
- python 图像插值 最近邻、双线性、双三次实例
- tp5(thinkPHP5)框架实现多数据库查询的方法
- Python-openCV开运算实例
- php curl获取https页面内容,不直接输出返回结果的设置方法
- 详解php中curl返回false的解决办法
- Pytorch mask-rcnn 实现细节分享
- pytorch中的weight-initilzation用法
- python安装读取grib库总结(推荐)