Pandas 简介

学习目标

  • 大致了解pandas库的DataFrameSeries数据结构
  • 存取和处理DataFrameSeries中的数据
  • CSV数据导入pandas库的DataFrame
  • DataFrame重建索引来随机打乱数据

pandas 是一种存列数据分析API。它是用于处理和分析输入数据的强大工具,很多机器学习框架都支持将pandas数据结构作为输入。本文只介绍它的核心概念。有关更完整的参考,请访问 pandas文档网站

基本概念

导入pandas API 并输出相应的 API 版本:

1
2
3
4
from __future__ import print_function

import pandas as pd
pd.__version__
1
u'0.22.2'

pandas中主要的数据被实现为以下两类:

  • DataFrame,可以想象成一个Excel表,包含多个行和已命名的列。
  • Series,它是单一列。DataFrame 中包含一个或多个 Series,每个 Series 均有一个名称。

数据框架是用于 数据操控的一种常用抽象实现形式。 SparkR中也有类似的实现。

创建 Series 的一种方法时构建 Series 对象。例如:

1
pd.Series(['San Francisco', 'San Jose', 'Sacramento'])

DataFrame 和字典很像,Series 对应字典的 键-值对,Series 的名称为,数据为。例如像下面这样创建 DataFrame 对象:

1
2
3
4
city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento'])
population = pd.Series([852469, 1015785, 485199])

pd.DataFrame({'City name': city_names, 'Population': population})

但在大多数情况下,是将整个文件加载到 DataFrame 中。

1
data = pd.read_csv('path or url', *args, **kwargs)

访问数据

前面提到,DataFrame 和字典很像,还体现在访问数据的方式上。

1
2
3
cities['City name']     # 返回名称为 City name 的 Series

cities[0:2] # 返回所有 Series 的前两个值构建的 DataFrame

此外,pandas针对高级 索引和选择提供了机器丰富的 API。

操控数据

可以向 Series 应用 Python 的基本运算指令。例如:

1
population / 1000.

Numpy是一种用于进行科学计算的常用工具包。pandas Series 可用作大多数 Numpy 函数的参数:

1
2
import numpy as np
np.log(population)

对于更复杂的单列转换,可以使用 Series.apply。像 Python 映射函数一样,Series.apply 将以参数形式接受 lambda函数,而该函数会应用于每个值。 下面的示例创建了一个指明 population 是否超过 100 万的新 Series:

1
2
3
4
5
6
population.apply(lambda val: val > 1000000)

0 False
1 True
2 False
dtype: bool

DataFrame 的修改方式也非常简单。例如,以下代码向现有 DataFrame 添加了两个 Series:

1
2
3
cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92])
cities['Population density'] = cities['Population'] / cities['Area square miles']
cities