数据分析之Pandas(一):Series、DataFrame基本操作及索引对象
来源:互联网 发布:淘宝网双11 编辑:程序博客网 时间:2024/06/10 14:48
Pandas简介
Pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。
Pandas是基于NumPy构建的,是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具,让以NumPy为中心的应用变得快捷简单。
pandas数据结构
pandas主要有两种数据结构:
- Series
Series是一种类似于一维数组的对象,由一组数据以及一组与之相关的数据标签组成。仅由一组数据即可产生最简单的Series - DataFrame
DataFrame是一个表格型的数据,含有一组有序的列,每列可以是不同的值类型。Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。你可以把它想象成一个series的字典项。
Series操作
引入Pandas包,由于Series和DataFrame用的次数非常多,可以将其命名空间单独引入用起来更方便。下面是定义一个Series
In [1]: from pandas import Series,DataFrameIn [2]: import pandasIn [3]: obj = Series([4,7,-5,3])In [4]: objOut[4]: 0 41 72 -53 3dtype: int64
通过Series的values和index属性获取其数组表示形式和索引对象
In [5]: obj.valuesOut[5]: array([ 4, 7, -5, 3], dtype=int64)In [6]: obj[0]Out[6]: 4In [7]: obj.indexOut[7]: RangeIndex(start=0, stop=4, step=1)
自定义索引:Series可以通过自定义索引改变series的索引值,默认会自动创建一个0到N-1的整数型索引。
In [8]: obj2 = Series([4,7,-5,3],index=['d','b','a','c'])In [9]: obj2Out[9]: d 4b 7a -5c 3dtype: int64In [10]: obj2.indexOut[10]: Index([u'd', u'b', u'a', u'c'], dtype='object')In [11]: obj2['d']Out[11]: 4
通过索引的方式获取单个或一组值
In [15]: obj2[['c','a','d']]Out[15]: c 3a -5d 4dtype: int64
通过索引的方式修改单个或一组值
In [16]: obj2['d']=6In [17]: obj2[['c','a','d']]Out[17]: c 3a -5d 6dtype: int64In [18]: obj2Out[18]: d 6b 7a -5c 3dtype: int64
NumPy数组运算会保留索引还值之间的链接
In [19]: obj2[obj2>0]Out[19]: d 6b 7c 3dtype: int64In [20]: obj2*2Out[20]: d 12b 14a -10c 6dtype: int64In [23]: import numpy as npIn [24]: np.exp(obj2)Out[24]: d 403.428793b 1096.633158a 0.006738c 20.085537
Series可以看成一个定长的有序字典,它可以用在许多原本需要字典参数的函数中:
In [25]: 'b' in obj2Out[25]: TrueIn [26]: 'e' in obj2Out[26]: False
Python字典创建Series
In [27]: data = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}In [28]: obj3 = Series(data)In [29]: obj3Out[29]: Ohio 35000Oregon 16000Texas 71000Utah 5000dtype: int64
查找data中与states中数据匹配的值
In [30]: states = ['California','Ohio','Oregon','Texas']In [31]: obj4 = Series(data,index=states)In [32]: obj4Out[32]: California NaNOhio 35000.0Oregon 16000.0Texas 71000.0dtype: float64
Series能在算术运算中会自动对齐不同索引的数据
obj3+obj4Out[33]: California NaNOhio 70000.0Oregon 32000.0Texas 142000.0Utah NaNdtype: float64
DataFrame操作
构建DataFrame的办法很多,通常是直接传入一个由等长列表或NumPy数组组成的字典
In [40]: data = {'state':['Ohio','Ohio','Ohio','Ohio','Ohio'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}In [41]: frame = DataFrame(data)In [42]: frameOut[42]: pop state year0 1.5 Ohio 20001 1.7 Ohio 20012 3.6 Ohio 20023 2.4 Ohio 20014 2.9 Ohio 2002
通过字典标记的方式或熟悉的方式,可以将DataFrame的列获取为一个Series,返回的series拥有原DataFrame相同的索引,且其name属性已经被相应地设置
In [43]: frame['state']Out[43]: 0 Ohio1 Ohio2 Ohio3 Ohio4 OhioName: state, dtype: objectIn [44]: frame.stateOut[44]: 0 Ohio1 Ohio2 Ohio3 Ohio4 OhioName: state, dtype: object
按行获取,可通过loc获取
In [52]: frame2.loc['three']Out[52]: year 2002state Ohiopop 3.6Name: three, dtype: object
将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度匹配,如果是一个Series,就会精确匹配DataFrame的索引,空位将被填充缺失值。为不存在的列赋值会创建出新列。
In [54]: val = Series([-1.2,-1.5,-1.7],index=['two','four','five'])In [55]: frame2['debt']=valIn [56]: frame2Out[56]: year state pop debtone 2000 Ohio 1.5 NaNtwo 2001 Ohio 1.7 -1.2three 2002 Ohio 3.6 NaNfour 2001 Ohio 2.4 -1.5five 2002 Ohio 2.9 -1.7
另一种常见的数据形式是嵌套字典,如果将它传给dataframe,就会被解释为:外层字典的键作为列,内层键作为行索引。
In [58]: pop ={'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}In [59]: frame3 = DataFrame(pop)In [60]: frame3Out[60]: Nevada Ohio2000 NaN 1.52001 2.4 1.72002 2.9 3.6
也可以对结果进行转置
frame3.TOut[61]: 2000 2001 2002Nevada NaN 2.4 2.9Ohio 1.5 1.7 3.6
表中列出了DataFrame构造器所能接收的数据
跟Series一样,values属性也会以二维ndarray的形式返回dataframe中的数据
In [62]: frame3.valuesOut[62]: array([[ nan, 1.5], [ 2.4, 1.7], [ 2.9, 3.6]])
索引对象
Pandas的索引对象负责管理轴标签和其他元数据。构建Series和DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index。
In [63]: obj = Series(range(3),index=['a','b','c'])In [64]: index = obj.indexIn [65]: indexOut[65]: Index([u'a', u'b', u'c'], dtype='object')In [66]: index[1:]Out[66]: Index([u'b', u'c'], dtype='object')In [67]: index[1]='d'Traceback (most recent call last): File "<ipython-input-67-d3f90986bdb1>", line 1, in <module> index[1]='d' File "C:\ProgramData\Anaconda2\lib\site-packages\pandas\core\indexes\base.py", line 1620, in __setitem__ raise TypeError("Index does not support mutable operations")TypeError: Index does not support mutable operations
index对象是不可修改的,如果对其进行修改,会抛出异常。这样有利于index在多个数据结构之间安全共享
pandas中主要的index对象
Index的方法和属性
- 数据分析之Pandas(一):Series、DataFrame基本操作及索引对象
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
- 数据分析之Pandas-01Series和DataFrame
- 用python做数据分析|pandas库:DataFrame基本操作
- #######用python做数据分析4|pandas库介绍之DataFrame基本操作#######
- 用python做数据分析4|pandas库介绍之DataFrame基本操作
- 用python做数据分析4|pandas库介绍之DataFrame基本操作
- 用python做数据分析4|pandas库介绍之DataFrame基本操作
- 用python做数据分析4|pandas库介绍之DataFrame基本操作
- 用python做数据分析4|pandas库介绍之DataFrame基本操作
- Pandas 数据结构Series、DataFrame分析
- Pandas学习:对于Series和DataFrame一些基本操作
- pandas Series 的索引对象(一)
- 利用pandas进行数据分析之二:DataFrame与Series数据结构对比
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一、pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主
- pandas库介绍之DataFrame基本操作
- pandas库介绍之DataFrame基本操作
- 用python做数据分析4|pandas库介绍之DataFrame基本操作 by 是蓝先生
- Linux下使用shadowsocks-qt5
- 单例的各种写法以及双重检查的问题
- 翻转字符串
- 第二章摘抄笔记(二)The C Programming Lanuage
- Maven项目:Spring MVC + Ajax + Json + RequestBody:POST后台服务器接收前端JSON数据并注解到POJO内
- 数据分析之Pandas(一):Series、DataFrame基本操作及索引对象
- Colorful Tree HDU
- hadoop配置
- JSON to Excel Documentation
- Git常用命令集合
- 遍历HashMap的最佳方法
- 重起myelipse的时候,发现src有个红叉
- Intellij IDEA创建包(package)问题解决方案
- The system is running in low-graphics mode ubuntu 14.04