概述:pandas含有使数据分析工作变得更快更简单的高级数据结构和操作工具,pandas是基于Numpy构建的。pandas在过去的几年中逐渐成长为一个非常强大的库。
引入pandas
>>> from pandas import Series,DataFrame
>>> import pandas as pd
pandas有两个主要的数据结构:Series和DataFrame.
Series是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series:
>>> obj = Series([4,7,-5,3])
>>> obj
0 4
1 7
2 -5
3 3
dtype: int64
Series的字符串表现形式为:索引在左边,值在右边。你可以通过Series的values和index属性获取其数组表现形式和索引对象:
>>> obj.values
array([ 4, 7, -5, 3], dtype=int64)
>>> obj.index
RangeIndex(start=0, stop=4, step=1)
通常,我们希望所创建的Series带有一个可以对各个数据点进行标记的索引:
>>> obj2 = Series([4,7,-5,3],index=['d','b','a','c'])
>>> obj2
d 4
b 7
a -5
c 3
dtype: int64
与普通的Numpy相比,你可以通过索引的方式选取Series的单个或者一组值
>>> obj2['a']
-5
>>> obj2[['a','b']] #注意这里是双层[]
a -5
b 7
dtype: int64
Numpy数组运算都会保留索引和值之间的链接。
>>> obj2 * 2
d 8
b 14
a -10
c 6
还可以将Series看成是定长的有序字典,因为它是索引值到数据值的一个映射。
>>> 'b' in obj2
True
如果数据存放在Python字典中,可以直接转成Series:
>>> sdata = {'test':1,'hello':2}
>>> obj3 = Series(sdata)
>>> obj3
hello 2
test 1
dtype: int64
NaN(非数字),在pandas中,它代表缺失或NA值。使用缺失(missing)或NA表示缺失数据。pandas的isnull和notnull函数可以用于检测缺失数据。
Series也有类似的方法。
>>> states = ['test','haha']
>>> obj4 = Series(sdata,states)
>>> obj4
test 1.0
haha NaN
dtype: float64
>>> obj4.isnull()
test False
haha True
dtype: bool
Series的一个重要功能是:它在算术运算中会自动地对其不同索引的数据。
Series对象本身及索引都有一个name的属性,该属性跟pandas其他的关键功能关系非常密切。
>>> obj4.name = 'sunpeng'
>>> obj4.index.name = 'llala'
>>> obj4
llala
test 1.0
haha NaN
Name: sunpeng, dtype: float64
Series的索引也可以通过赋值的方式就地修改。
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共同用一个索引)。和其他类似的数据结构相比,DataFrame中面向行和面向列的操作基本上是平衡的。其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的数据结构)。
构建DataFrame的方法有很多,最常用的方法是直接传入一个由等长列表或Numpy数组组成的字典:
>>> data = {'state':['1','2'],'year':['a','b'],'pop':['x','y']}
>>> data
{'state': ['1', '2'], 'pop': ['x', 'y'], 'year': ['a', 'b']}
>>> frame = DataFrame(data)
>>> frame
pop state year
0 x 1 a
1 y 2 b
结果DataFrame会自动加上索引,且全部列会被有序排列。
如果指定了列顺序,则DataFrame的列就会按照指定顺序进行排列。
>>> DataFrame(data,columns=['year','pop','state'])
year pop state
0 a x 1
1 b y 2
如果穿入的列在数据中找不到,就会产生NA值。
通过类似字典标记的方式或属性的方式,可以讲DataFrame的列获取为一个Series。