简介

名称 “Pandas” 源于“面板数据”(Panel Data)一词,是多维结构化数据集的计量经济学术语。pandas是一个处理excel的Python模块,它建造在numpy之上,许多用excel处理起来很复杂的任务如果用panda处理会很简单。下面对pandas以及其处理excel的方法进行简单介绍。

安装依赖

首先需要安装相关依赖,安装命令如下:

sudo python -m pip install xlwt xlrd
sudo python -m pip install panda openpyxl

主要数据结构

pandas中有两个主要的数据结构:Series和DataFrame。

Series

Series是一个一维的类似的数组对象,它包含一个数组数据(任何numpy数据类型)和一个与数组关联的索引。为了方便理解,你可以把Series看着是一个有序字典。其中索引是连续的,从0开始。

from pandas import Series, DataFrame

series = Series(["Jim", "Tom", "Lily"])
print(series)

输出如下,左边表示每个元素对应的索引,右边表示相应元素,索引从0开始。

0     Jim
1     Tom
2    Lily
dtype: object


你可以使用 series.values和series.index 来获取元素和相应的索引。

print(series.values)
print(series.index)

输出如下:

['Jim' 'Tom' 'Lily']
RangeIndex(start=0, stop=3, step=1)


可以用Series对象去和一些值进行比较,实际处理时会使用每个元素去与该值进行比较,比较后的结果也是一个Series对象。

series2 = Series([3, 6, 8, 7])
series3 = series2 > 5

print(series3)
print(isinstance(series3, Series))

输出如下:

0    False
1     True
2     True
3     True
dtype: bool
True


在创建Series对象时可以指定索引,然后使用指定的索引去访问Series对象,未指定时用初始化的索引去访问。

series4 = Series([20, 30, 40], index=["Jan", "Feb", "Mar"])
print(series4)
print(series4["Jan"])

输出如下:

Jan    20
Feb    30
Mar    40
dtype: int64
20


或者使用Series对象去访问Series对象

series5 = Series(["Feb", "Mar"])
series6 = series4 > 35
print(series5)
print(series6)
print(series4[series5])
print(series4[series6])

输出如下:

0    Feb
1    Mar
dtype: object
Jan    False
Feb    False
Mar     True
dtype: bool
Feb    30
Mar    40
dtype: int64
Mar    40
dtype: int64


这里只对Series进行简单介绍,更多复杂功能请参考官方文档。


DataFrame

一个DataFrame表示一个表格,它包含一个经过排序的列表集。每一个列表都可以有不同的类型值(数字,字符串,布尔等等)。Datarame有行和列的索引;它可以被看作是一个Series的字典(每个Series共享一个索引)。


可以通过相等长度列表的字典来构建一个DataFrame。

data = {"name": ["Jim", "Tom", "Lily"],
        "age": ["18", "17", "17"]}
dataFrame = DataFrame(data)

print(dataFrame)

输出如下,这时对列名进行了排序。

  age  name
0  18   Jim
1  17   Tom
2  17  Lily


当然,你可以通过columns参数来指定列的排序。

data = {"name": ["Jim", "Tom", "Lily"],
        "age": ["18", "17", "17"]}
dataFrame = DataFrame(data, columns=["name", "age"])

print(dataFrame)

输出如下:

   name age
0   Jim  18
1   Tom  17
2  Lily  17


和Series中一样,如果你多传入了一个列,但它不包含在data中,那么在结果中,它会显示为NA值。

data = {"name": ["Jim", "Tom", "Lily"],
        "age": ["18", "17", "17"]}
dataFrame = DataFrame(data, columns=["name", "age", "score"])

print(dataFrame)

输出如下:

   name age score
0   Jim  18   NaN
1   Tom  17   NaN
2  Lily  17   NaN


参考

http://pandas.pydata.org/pandas-docs/stable/cookbook.html#cookbook

http://pda.readthedocs.io/en/latest/chp5.html#