用于数据探索和分析,基于numpy模块
安装
pip install pandas
常用操作
Series
序列(可以理解为一列数据),举例:
>>> a = pandas.Series([2,1,6,3])
>>> pandas.Series([2,1,6,3])
0 2
1 1
2 6
3 3
dtype: int64
注:
上面没有指定索引,所以默认索引就为从0开始的数字,也可以自己指定索引,举例:
>>> pandas.Series([2,1,6,3], index=['a','b','c','d'])
a 2
b 1
c 6
d 3
dtype: int64
DataFrame
数据框(行列都有的数据),举例:
>>> a = pandas.DataFrame([[1,2,5,3],[3,6],[3,5,1,2,6]]) #里面不一定得数字
>>> a
0 1 2 3 4
0 1 2 5.0 3.0 NaN
1 3 6 NaN NaN NaN
2 3 5 1.0 2.0 6.0
#最上面一行代表每一列序号,最左边一列代表每一行序号
注:
最后面有介绍DataFrame和Series的关系以及一些踩坑注意点
取值
按先列后行顺序取值,而且空的地方虽然为NaN,但是NaN之间是不等的,对上面的a举例:
>>> a[2][1] #这里不是[1][2],是先列后行
nan
>>> a[3][1]
nan
>>> a[3][1] == a[3][1]
False #可以看出两个NaN不等
注:
在pandas里异常的数据(如空)用NaN表示,以及无穷数用inf进行表示,此时对于NaN可以通过pandas下的isnull方法或者numpy下的isnan方法判断,而inf则通过numpy下的isinf判断,举例:
>>> a = pandas.DataFrame([[1,2,5,3],[3,6, float("inf")],[3,5,1,2,6]])
>>> a
0 1 2 3 4
0 1 2 5.000000 3.0 NaN
1 3 6 inf NaN NaN
2 3 5 1.000000 2.0 6.0
>>> a.isnull()
0 1 2 3 4
0 False False False False True
1 False False False True True
2 False False False False False
>>> np.isnan(a)
0 1 2 3 4
0 False False False False True
1 False False False True True
2 False False False False False
>>> np.isinf(a)
0 1 2 3 4
0 False False False False False
1 False False True False False
2 False False False False False
切片操作
使用iloc方法可以对DataFrame数据进行切片操作,使用切片操作时的顺序是先行后列,举例:
>>> a
0 1 2 3 4
0 1 2 5.0 3.0 NaN
1 3 6 NaN NaN NaN
2 3 5 1.0 2.0 6.0
>>> a.iloc[2, 3:]
# 去第三行第四列以后的数据
3 2.0
4 6.0
Name: 2, dtype: float64
使用ix方法也可以进行切片操作,而且支持更加强大的筛选数据方式,如按列名筛选,举例:
>>> a = pandas.DataFrame([[1,2,5,3],[3,6],[3,5,1,2,6]])
>>> a.columns = ['a', 'b', 'c', 'd', 'e']
# 设置列名
>>> a
a b c d e
0 1 2 5.0 3.0 NaN
1 3 6 NaN NaN NaN
2 3 5 1.0 2.0 6.0
>>> a.ix[:, a.columns == 'c']
# 索引所有行,且列名为c的那一列
c
0 5.0
1 NaN
2 1.0
按条件筛选
举例:
>>> a = pandas.DataFrame([[1,2,5,3],[3,6],[3,5,1,2,6]])
>>> a
0 1 2 3 4
0 1 2 5.0 3.0 NaN
1 3 6 NaN NaN NaN
2 3 5 1.0 2.0 6.0
>>> a[a[4].notnull()]
# 筛选第四列不为NaN的数据
0 1 2 3 4
2 3 5 1.0 2.0 6.0
>>> a[a[1] > 2]
# 筛选第一列大于2的数据
0 1 2 3 4
1 3 6 NaN NaN NaN
2 3 5 1.0 2.0 6.0
>>> a.T[a.T[0].notnull()].T
# 转置后筛选第0列不为NaN的数据,再转回来,即筛选第0行不为NaN的列
0 1 2 3
0 1.0 2.0 5.0 3.0
1 3.0 6.0 NaN NaN
2 3.0 5.0 1.0 2.0
注:
筛选后的数据不能够直接通过索引或者切片来进行某列的数据修改,因此需要使用到loc方法,要注意的是如果直接对索引后的数据进行赋值将会对整行的所有列都进行修改,举例:
>>> a = pandas.DataFrame([[1,2,5,3],[3,6],[3,5,1,2,6]])
>>> a
0 1 2 3 4
0 1 2 5.0 3.0 NaN
1 3 6 NaN NaN NaN
2 3 5 1.0 2.0 6.0
>>> a[3] != 3.
# 筛选第三列不为3的数据
0 False
1 True
2 True
Name: 3, dtype: bool
>>> a[a[3] != 3.]
# 索引筛选后的数据
0 1