python数据处理工具包——pandas简介(如何构建数据结构篇)
2017-03-22 00:21
447 查看
前言
最近刚开始尝试使用python分析数据,网上很多人都推荐使用pandas,于是自己也去试了试,觉得其功能甚是强大,特别是对于时间序列的处理有很多内置的函数用起来非常方便。这里先简单地介绍一下pandas的数据结构,主要内容来自于《利用Python进行数据分析》。简单介绍
pandas是基于NumPy构建的,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。一般通过如下方式引用:import pandas as pd
所以很多时候都简写为pd了。
pandas的数据结构
在pandas中的数据结构有Series、DataFrame、Panel等。其中Series和DataFrame是最主要的两种数据结构,它们为大多数应用提供了一种可靠的、易于使用的基础。Series
Series是一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。Series可以通过List、Dict或Array等数据结构直接生成。如:# List to Series In [2]:obj = pd.Series([4, 7, -5, 3]) In [3]:obj Out[3]: 0 4 1 7 2 -5 3 3 dtype: int64 # Dict to Series In [4]: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} In [5]: obj2 = pd.Series(sdata) In [6]: obj2 Out[6]: Ohio 35000 Oregon 16000 Texas 71000 Utah 5000 dtype: int64 # Array to Series In [8]: data = np.array([1, 3, 5, 7, 9]) In [9]: sdata2 = pd.Series(data) In [10]: sdata2 Out[10]: 0 1 1 3 2 5 3 7 4 9 dtype: int32
可以看到pandas在没有给定索引时,会自动生成索引;而像Dict这类给定索引的数据,会沿用原数据的索引。当然我们也可以自己设定索引:
In [12]: obj = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c']) In [13]: obj Out[13]: d 4 b 7 a -5 c 3 dtype: int64
与普通NumPy数组相比,你可以通过索引的方式选取Series中的单个或一组值:
In [15]: obj['a'] Out[15]: -5 In [16]: obj['d'] = 6 In [17]: obj[['c', 'a', 'd']] Out[17]: c 3 a -5 d 6 dtype: int64
NumPy数组运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接:
In [18]: obj[obj>0] Out[18]: d 6 b 7 c 3 dtype: int64 In [19]: obj*2 Out[19]: d 12 b 14 a -10 c 6 dtype: int64 In [20]: np.exp(obj) Out[20]: d 403.428793 b 1096.633158 a 0.006738 c 20.085537 dtype: float64
DataFrame
如果说Series是一个一维数组型结构,那么DataFrame就是个表格型数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。跟其他类似的数据结构相比(如R的data.frame),DataFrame中面向行和面向列的操作基本上是平衡的。其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。构建DataFrame的办法有很多,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典:
In [24]: data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], ...: 'year': [2000, 2001, 2002, 2001, 2002], ...: 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]} ...: frame = pd.DataFrame(data) In [25]: frame Out[25]: pop state year 0 1.5 Ohio 2000 1 1.7 Ohio 2001 2 3.6 Ohio 2002 3 2.4 Nevada 2001 4 2.9 Nevada 2002
可以看到,DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列。如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列:
In [26]: frame = pd.DataFrame(data, columns=['year', 'state', 'pop']) In [27]: frame Out[27]: year state pop 0 2000 Ohio 1.5 1 2001 Ohio 1.7 2 2002 Ohio 3.6 3 2001 Nevada 2.4 4 2002 Nevada 2.9
通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:
In [28]: frame['state'] Out[28]: 0 Ohio 1 Ohio 2 Ohio 3 Nevada 4 Nevada Name: state, dtype: object
具体关于DataFrame如何索引有好几种方法,今后会再开一篇博客详细讲一讲。
关于pandas数据结构的更多内容可以上网查阅或翻阅《利用Python进行数据分析》。
相关文章推荐
- python pandas 如何替换某列的一个值
- 如何构建自己的python package
- windows下如何快速构建一个python3项目并发布
- Python数据处理的瑞士军刀:pandas(12/10)
- 【Python数据分析】pandas数据结构简介
- python 数据处理学习一(pandas)
- 如何构建优秀的命令行用户界面的 Python 库
- 【量化小讲堂-Python&Pandas系列02】Windows下如何安装Python、Pandas
- 量化分析师的Python日记【第6天:数据处理的瑞士军刀pandas下篇
- 如何用Maven构建一个project(一)—eclipse工具包配置
- 用 Python 做数据处理必看:12 个使效率倍增的 Pandas 技巧(下)
- python pandas 如何对一列做四舍五入的操作
- Python高级数据处理与可视化(三)---- Matplotlib图像属性控制 & Pandas作图
- Python Pandas 二维数据处理与 T-SQL 对应关系
- python 数据处理学习pandas之DataFrame(一)
- python pagerank实现的工具包,原理简介
- Python数据分析之如何利用pandas查询数据示例代码
- Python模块简介及安装 [numpy,pandas,matplotlib,scipy,statsmodels,Gensim,sklearn,keras]
- Python基于pandas的数据处理(一)
- python-pandas工具包入门教程(1)