Pandas入门
在安装 Pandas 之前,确保你的操作系统中有 NumPy。如果你是从源代码直接编译,那么还需要相应的工具编译建立 Pandas 所需的 C 语言与 Cython 代码。如果你按照我的建议使用了 Anaconda,那么 Pandas 就已经安装好了。
和之前导入 NumPy 并使用别名 np 一样,我们将导入 Pandas 并使用别名 pd:
In[1]: import numpy as np
import pandas as pd
1. Pandas对象简介
如果从底层视角观察 Pandas 对象,可以把它们看成增强版的 NumPy 结构化数组,行列都不再只是简单的整数索引,还可以带上标签。 Pandas 的三个基本数据结构: Series、 DataFrame 和 Index。
1.1 Pandas的 Series对象
Pandas 的 Series 对象是一个带索引数据构成的一维数组。可以用一个数组创建 Series 对象:
In[2]: data = pd.Series([0.25, 0.5, 0.75, 1.0])
data
Out[2]: 0 0.25
1 0.50
2 0.75
3 1.00
dtype: float64
从上面的结果中,你会发现 Series 对象将一组数据和一组索引绑定在一起,我们可以通过values 属性和 index 属性获取数据。 values 属性返回的结果与 NumPy 数组类似:
In[3]: data.values
Out[3]: array([ 0.25, 0.5 , 0.75, 1. ])
# index 属性返回的结果是一个类型为 pd.Index 的类数组对象
In[4]: data.index
Out[4]: RangeIndex(start=0, stop=4, step=1)
# 和 NumPy 数组一样,数据可以通过 Python 的中括号索引标签获取:
In[5]: data[1]
Out[5]: 0.5
In[6]: data[1:3]
Out[6]: 1 0.50
2 0.75
dtype: float64
但是我们将会看到, Pandas 的 Series 对象比它模仿的一维NumPy数组更加通用、灵活。
1.1.1 Serise是通用的NumPy数组
NumPy 数组通过隐式定义的整数索引获取数值,而 Pandas 的Series 对象用一种显式定义的索引与数值关联。显式索引的定义让 Series 对象拥有了更强的能力。
索引不再仅仅是整数,还可以是任意想要的类型。如果需要,完全可以用字符串定义索引:
In[7]: data = pd.Series([0.25, 0.5, 0.75, 1.0],
index=['a', 'b', 'c', 'd'])
data
Out[7]: a 0.25
b 0.50
c 0.75
d 1.00
dtype: float64
获取数值的方式与之前一样:
In[8]: data['b']
Out[8]: 0.5
# 也可以使用不连续或不按顺序的索引:
In[9]: data = pd.Series([0.25, 0.5, 0.75, 1.0],
index=[2, 5, 3, 7])
data
Out[9]: 2 0.25
5 0.50
3 0.75
7