pandas简答介绍
一、 Pandas简介
1、Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
2、Pandas 是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。
3、数据结构:
三、 Pandas使用
1、导入pandas模块并使用别名,以及导入Series模块,以下使用基于本次导入。
In [1]: from pandas import Series
In [2]: import pandas as pd
2、Series
Series 就如同列表一样,一系列数据,每个数据对应一个索引值。
Series 就是“竖起来”的 list:
In [3]: s = Series([1,4,'ww','tt'])
In [4]: s
Out[4]:
0 1
1 4
2 ww
3 tt
dtype: object
另外一点也很像列表,就是里面的元素的类型,由你任意决定(其实是由需要来决定)。
这里,我们实质上创建了一个 Series 对象,这个对象当然就有其属性和方法了。比如,下面的两个属性依次可以显示 Series 对象的数据值和索引:
In [5]: s.index
Out[5]: RangeIndex(start=0, stop=4, step=1)
In [8]: s.values
Out[8]: array([1, 4, 'ww', 'tt'], dtype=object)
列表的索引只能是从 0 开始的整数,Series 数据类型在默认情况下,其索引也是如此。不过,区别于列表的是,Series 可以自定义索引:
In [9]: s2 = Series(['wangxing','man',24],index=['name','sex','age'])
In [10]: s2
Out[10]:
name wangxing
sex man
age 24
dtype: object
每个元素都有了索引,就可以根据索引操作元素了。还记得 list 中的操作吗?Series 中,也有类似的操作。先看简单的,根据索引查看其值和修改其值:
In [12]: s2['name']
Out[12]: 'wangxing'
In [45]: s2['name'] = 'wudadiao'
In [46]: s2
Out[46]:
name wudadiao
sex man
age 24
dtype: object
这是不是又有点类似 dict 数据了呢?的确如此。看下面就理解了。
读者是否注意到,前面定义 Series 对象的时候,用的是列表,即 Series() 方法的参数中,第一个列表就是其数据值,如果需要定义 index,放在后面,依然是一个列表。除了这种方法之外,还可以用下面的方法定义 Series 对象:
In [13]: sd = {'python':9000,'c++':9001,'c#':9000}
In [14]: s3 = Series(sd)
In [15]: s3
Out[15]:
c# 9000
c++ 9001
python 9000
dtype: int64
现在是否理解为什么前面那个类似 dict 了?因为本来就是可以这样定义的。
这时候,索引依然可以自定义。Pandas 的优势在这里体现出来,如果自定义了索引,自定的索引会自动寻找原来的索引,如果一样的,就取原来索引对应的值,这个可以简称为“自动对齐”。
In [16]: s4 = Series(sd,index=['java','c++','c#'])
In [17]: s4
Out[17]:
java NaN
c++ 9001.0
c# 9000.0
dtype: float64
在 Pandas 中,如果没有值,都对齐赋给 NaN。
Pandas 有专门的方法来判断值是否为空。
In [19]: pd.isnull(s4)
Out[19]:
java True
c++ False
c# False
dtype: bool
此外,Series 对象也有同样的方法:
In [20]: s4.isnull()
Out[20]:
java True
c++ False
c# False
dtype: bool
其实,对索引的名字,是可以从新定义的:
In [21]: s4.index = ['语文','数学','English']
In [22]: s4
Out[22]:
语文 NaN
数学 9001.0
English 9000.0
dtype: float64
对于 Series 数据,也可以做类似下面的运算(关于运算,后面还要详细介绍):
In [23]: s4 * 2
Out[23]:
语文 NaN
数学 18002.0
English 18000.0
dtype: float64
In [24]: s4[s4 > 9000]
Out[24]:
数学 9001.0
dtype: float64