pandas全称及说明
没找到pandas缩写的定义,我自己猜了一个,应该八九不离十吧。Python ANalysis DAta tookitS. pandas是一个开源的遵循BSD license的库,支持高性能,易用的数据结构和数据分析工具。目前最新稳定版本是v0.22.0(2017.12.29)
安装方法
conda install pandas
或者pip install pandas
如果下载比较慢,可以考虑直接下载安装文件pandas-0.22.0-cp27-cp27mu-manylinux1_x86_64.whl
然后安装sudo pip install wheel 之后, sudo pip install pandas-0.22.0-cp27-cp27mu-manylinux1_x86_64.whl 即可安装完成。下面开始pandas之旅。
数据结构介绍
pandas中有两类非常重要的数据结构,即序列series和数据框dataFrame。series类似于numpy中的一维数组,特别之处在于它可以通过索引标签的方式获取数据,还具有索引的自动对齐功能;dataframe类似于numpy的二维数组,当更加灵活。
首先把下列三个库import进去,如果出现问题,请根据提示安装相应模块。例如python-tk等。
>>> import matplotlib.pyplot as plt
>>> import pandas as pd
>>> import numpy as np
先看series的创建和使用
>>> arr1=np.arange(10)
>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> type(arr1)
<type 'numpy.ndarray'>
>>> s1=pd.Series(arr1) #通过传入numpy的一维数组对象创建series
>>> s1 #series的索引自动从0开始。
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int64
>>> type(s1)
<class 'pandas.core.series.Series'>
另外还可以通过字典的方式创建series
>>> dic1={'a':10,'b':20,'c':40}
>>> dic1
{'a': 10, 'c': 40, 'b': 20}
>>> type(dic1)
<type 'dict'>
>>> s2=pd.Series(dic1)
>>> s2 #从这里看series与字典更接近,都有索引。
a 10
b 20
c 40
dtype: int64
我们来看一下series的索引具体是什么
>>> s1.index
RangeIndex(start=0, stop=10, step=1)
>>> s2.index
Index([u'a', u'b', u'c'], dtype='object')
有了索引就可以通过索引访问数据了。
>>> s1[3]
3
>>> s2['b']
20
>>> s1[[1,3,5]]
1 1
3 3
5 5
dtype: int64
还有一种创建series的方法
>>> s5=pd.Series(np.array([10,15,20,30,55,80]),index=['a','b','c','d','e','f'])
>>> s5
a 10
b 15
c 20
d 30
e 55
f 80
dtype: int64
>>> s6=pd.Series(np.array([12,11,13,15,14,16]), index=['a','c','g','b','d','f'])
>>> s6
a 12
c 11
g 13
b 15
d 14
f 16
dtype: int64
此时s5和s6的索引不相同,把他们相加会出现什么情况呢?
>>> s5+s6 #结果就是索引值对应的数据相加,找不到对应的索引值的就返回NaN。
a 22.0
b 30.0
c 31.0
d 44.0
e NaN
f 96.0
g NaN
dtype: float64
series比较好理解,因为他是一维的。那么数据框呢?它有行索引和列索引。
>>> arr2=np.array(np.arange(12)).reshape(4,3)
>>> arr2
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>> df2=pd.DataFrame(arr2)
>>> df2 #看df2的值时,一定要注意,最上面一行时列索引,最左边一列是行索引。
0 1 2
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
>>>
类似数据库操作的功能
pd.io.parsers.read_csv可以直接从csv文件中读出内容并组成一个DataFrame对象。我们假设有一个student.csv文件。
student = pd.io.parsers.read_csv('student.csv')
查询数据的前5行或末尾5行
student.head()
student.tail()
查询指定的行
student.ix[[0,2,4,5,7]] #这里的ix索引标签函数必须是中括号[]
查询指定的列
student[['Name','Height','Weight']].head() #如果多个列的话,必须使用双重中括号
也可以通过ix索引标签查询指定的列
student.ix[:,['Name','Height','Weight']].head()
查询指定的行和列
student.ix[[0,2,4,5,7],['Name','Height','Weight']].head()
以上是从行或列的角度查询数据的子集,现在我们来看看如何通过布尔索引实现数据的子集查询。
查询所有女生的信息
student[student['Sex']=='F']
查询出所有12岁以上的女生信息
student[(student['Sex']=='F') & (student['Age']>12)]
查询出所有12岁以上的女生姓名、身高和体重
student[(student['Sex']=='F') & (student['Age']>12)][['Name','Height','Weight']]
上面的查询逻辑其实非常的简单,需要注意的是,如果是多个条件的查询,必须在&(且)或者|(或)的两端条件用括号括起来。
大家体会一下,这些操作和数据库的操作是不是很类似?
强大的统计功能
另外pandas还提供了许多统计函数:
d1.count() #非空元素计算
d1.min() #最小值
d1.max() #最大值
d1.idxmin() #最小值的位置,类似于R中的which.min函数
d1.idxmax() #最大值的位置,类似于R中的which.max函数
d1.quantile(0.1) #10%分位数
d1.sum() #求和
d1.mean() #均值
d1.median() #中位数
d1.mode() #众数
d1.var() #方差
d1.std() #标准差
d1.mad() #平均绝对偏差
d1.skew() #偏度
d1.kurt() #峰度
d1.describe() #一次性输出多个描述性统计指标
在Excel中有一个非常强大的功能就是数据透视表,通过托拉拽的方式可以迅速的查看数据的聚合情况,这里的聚合可以是计数、求和、均值、标准差等。
pandas为我们提供了非常强大的函数pivot_table(),该函数就是实现数据透视表功能的。
pandas可以灵活的解决很多工作中的数据处理、统计分析等任务。更详细的介绍,请自行搜索pandas官方网站。
还没有评论,来说两句吧...