Python 专题区|数据分析工具 Pandas

Python 专题区|数据分析工具 Pandas

前言

Pandas 是 Python 的最强大也是最通用的数据分析包。它的名称来自于面板数据(panel data)和 Python 数据分析(data analysis)。Pandas 最初被作为金融数据分析工具而开发出来,后来因为其强大的功能以及对大型数据的操作而被看成许多数据分析的基础工具。

准备好了吗?让我们一起来学习这一强大的表情包,噢不数据分析包吧!



Pandas 的使用以及安装

我们强烈建议 Pandas 的初学者在 Anaconda 的环境下使用它,直接搜索 Anaconda 官网就可以下载(Download Anaconda Now!)。Anaconda 作为 Python 最常用的开发环境之一,为 Pandas 的数据处理提供了非常多的帮助。这里我们用 Anaconda 里的 spyder 开发环境进行演示。


如果你用的是 Anaconda 的话,它已经为我们安装好了 Pandas 这个库,我们直接调用就可以了。

如果你是 Windows 系统并且没有安装 Pandas 的话,请在 cmd 窗口里输入:

pip install pandas

即可完成 pandas 的安装。

使用 Pandas 之前,我们首先要导入 pandas 这个库,通常采用的形式是:

import pandas as pd


Pandas 读写文件

Pandas 为文件以及数据库都提供了 API 接口。你可以用它读取 csv、excel、json、stata、sql、sas​ 等等。当然,输出的时候也可以直接输出成这些文件格式。我们来看读取 csv 文件的例子:
import pandas as pd
table = pd.read_csv(filepath, sep=',', names = None, encoding = None)

read_csv() 有很多参数,我们列举了最重要的几个:

  • ​filepath 指的是文件的路径

  • sep 指的是文件中数据的分割符

  • names 指的是文件的列名,通常写成 list 的形式

  • encoding 指的是文件的编码,Python3 使用 UTF-8 编码,因此它读取文件的时候首先要把文件的编码转成 UTF-8。中文的文件一般都为 GB2312, GBK 等。例如,我们在 spyder 中读取一个 example.csv 的文件,可以双击右边的变量名 table 查看所有的数据。
table = pd.read_csv('C:\\Users\\Administrator\\Desktop\\example.csv',  
                    sep=',',names = ['height','weight'])


Pandas 数据结构

Pandas 最主要的数据结构是 DataFrame,也就是上面我们读取 csv 所生成的文件表格。Pandas 还有另外两个数据结构,分别为 Series,panel。
  • Series:是一维的数组,是 DataFrame 的基础,可以看成其中的一列。Series 可以进行多种操作,例如加减运算,增删等。我们创建一个由 5 个随机数组成的 Series。
In [1]: import numpy as 
In [2]: s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
In [3]: s
Out[4]:
a    0.2735
b    0.6052
c   -0.1692
d    1.8298
e    0.5432
dtype: float64
  • DataFrame:是我们最常用的二维的数据表格,pandas 的核心操作都在里面,我们之后会介绍关于它的各种操作。

  • Panel:是基于 DataFrame 的扩充,实际上是三维的数组,其使用频率并不如前面两个常用。



DataFrame基本操作

1. 创建

DataFrame 的创建一般都是由其他的文件和数据库读写进来的,当然也可以直接自己输入数据创建。例如:

In [1]: df = pd.DataFrame({'A' : [1, 2, 3, 4], 'B': [5, 6, 7, 8]})

In [2]:df
Out[3]: 
   A  B
0  1  5
1  2  6
2  3  7
3  4  8

2. 处理缺失数据

处理缺失数据是数据表格的基本问题,DataFrame 为 missing data 的处理提供了相关的操作与函数。下面我们将给出一些具体的例子。


  • 我们可以用 fillna() 函数,指定一个值来替换 NaN



In [1]: df2
Out[2]: 
        one       two     three four   five  timestamp
a       NaN -0.282863 -1.509059  bar   True        NaT
c       NaN  1.212112 -0.173215  bar  False        NaT

In [3]: df2.fillna(0)
Out[4]: 
        one       two     three four   five  timestamp
a  0.000000 -0.282863 -1.509059  bar   True 1970-01-01
c  0.000000  1.212112 -0.173215  bar  False 1970-01-01
  • 我们也可以用缺失数据的前一个值或者后一个值来填充。

In [1]: df
Out[2]: 
        one        
f    -2.104569 
h       NaN 

In [3]: df.fillna(method = 'pad', limit = 1)
Out[4]: 
        one    
f    -2.104569 
h    -2.104569

这里我们可以指定填充的方式,比如可以用前面的数据填充,或者用后面的数据填充。以及填充的行数。相关的参数表格如下:



3. 内置函数及操作

DataFrame 里面还内置了一些基本的统计函数与操作,包括mean()skewness()correlation() 等。在这里我们就不再给出例子。



4. 合并

考虑到我们经常从许多的 csv 文件中读取数据,并且最终汇聚成一张总表进行操作。因此 DataFrame 的合并是不可避免的操作。Pandas 为合并提供了非常多样的操作,便于各种形式的 DataFrame 合并。其中主要的操作函数有 mergejoinconcat


  • merge()join() 的运算是通过一个或者多个键将行连接起来。对 SQL 或者其他关系型数据库熟悉的朋友,应该也很熟悉这个操作,这实际上就是数据库的连接操作。我们来看一个例子:

In [1]: left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
   ....:                      'A': ['A0', 'A1', 'A2', 'A3'],
   ....:                      'B': ['B0', 'B1', 'B2', 'B3']})
   ....: 

In [2]: right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
   ....:                       'C': ['C0', 'C1', 'C2', 'C3'],
   ....:                       'D': ['D0', 'D1', 'D2', 'D3']})
   ....: 

In [3]: result = pd.merge(left, right, on='key')

实际上合并过程是这样的:


  • concat() 的运算可以看成是 DataFrame 的简单堆叠,可以沿着任意一条轴,把表格合在一起。concat() 一般被用来处理超大表格(百万行以上)的简单合并,并通常能取得很好的效果。例如:



In [1]: df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
   ...:                     'B': ['B0', 'B1', 'B2', 'B3'],
   ...:                     'C': ['C0', 'C1', 'C2', 'C3'],
   ...:                     'D': ['D0', 'D1', 'D2', 'D3']},
   ...:                     index=[0, 1, 2, 3])
   ...: 

In [2]: df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
   ...:                     'B': ['B4', 'B5', 'B6', 'B7'],
   ...:                     'C': ['C4', 'C5', 'C6', 'C7'],
   ...:                     'D': ['D4', 'D5', 'D6', 'D7']},
   ...:                      index=[4, 5, 6, 7])
   ...: 

In [3]: df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
   ...:                     'B': ['B8', 'B9', 'B10', 'B11'],
   ...:                     'C': ['C8', 'C9', 'C10', 'C11'],
   ...:                     'D': ['D8', 'D9', 'D10', 'D11']},
   ...:                     index=[8, 9, 10, 11])
   ...: 

In [4]: frames = [df1, df2, df3]

In [5]: result = pd.concat(frames)

实际上合并过程是这样的:


5. 绘图

pandas 里面还有一些内置的绘图函数,可以进行简单的绘图。在这里我们就不详细介绍了,如果大家对绘图感兴趣,可以使用 Matplotlib 库。





原文作者:张祎璘

欢迎热爱数据科学的盆友们投稿,稿件请投至 787868940@qq.com

编辑于 2017-03-11

文章被以下专栏收录