Pandas简介
学习目标:
- 大致了解pandas的DataFrame和Series数据结构
- 存取和处理DataFrame和Series中的数据结构
- 将CSV数据导入pandas库的DataFrame
- 对DataFrame重建索引来随机打乱数据
pandas是一种列存数据分析API。它用于处理和分析输入数据,用于许多机器学习框架中。此文仅仅介绍核心概念,完整参考官方文档。
基本概念
导入格式
from __future__ import print_function
import pandas as pd
pd.__version__
pandas中的数据结构有两类:
- DataFrame,类似于关系型数据表格,包含多个行和已命名的列。
- Series,单一列。DataFrame中包含一个或多个Series,每个
Series
均有一个名称。
创建Series的一种方法是构建Series对象。例如:
pd.Series(['San Francisco', 'San Jose', 'Sacramento'])
可以将映射string列名称的dict传递到它们各自的Series,从而创建DataFrame对象。如果Series在长度上不一致,系统会用特殊的NA\NaN填充缺失的值。例如:
city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento'])
population = pd.Series([852469, 1015785, 485199])
pd.DataFrame({ 'City name': city_names, 'Population': population })
大多数情况下,你需要将整个文件加载到DataFrame中。
california_housing_dataframe = pd.read_csv("https://download.mlcc.google.cn/mledu-datasets/california_housing_train.csv", sep=",")
california_housing_dataframe.describe()
显示DataFrame的前几个记录
california_housing_dataframe.head()
pandas另一个强大功能是绘制图表。
california_housing_dataframe.hist('housing_median_age')
访问数据
可以使用python dict/list指令访问DataFrame数据:
cities = pd.DataFrame({ 'City name': city_names, 'Population': population })
print(type(cities['City name']))
cities['City name']
print(type(cities['City name'][1]))
cities['City name'][1]
pandas 针对高级索引和选择提供了极其丰富的 API
操控数据
Series应用python的基本运算指令。
例如
population / 1000.
NumPy 是一种用于进行科学计算的常用工具包。pandas Series
可用作大多数 NumPy 函数的参数:
import numpy as np
np.log(population)
更复杂的单列转换可以使用Series.apply。像 Python 映射函数一样,Series.apply将以参数形式接受lambda函数,而该函数会应用与每个值。
population.apply(lambda val: val > 1000000)
DataFrames
的修改方式也非常简单。例如,以下代码向现有 DataFrame
添加了两个 Series
:
cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92])
cities['Population density'] = cities['Population'] / cities['Area square miles']
cities
索引
Series
和 DataFrame
对象也定义了 index
属性,该属性会向每个 Series
项或 DataFrame
行赋一个标识符值。
默认情况下,在构造时,pandas 会赋可反映源数据顺序的索引值。索引值在创建后是稳定的;也就是说,它们不会因为数据重新排序而发生改变。
city_names.index
调用 DataFrame.reindex
以手动重新排列各行的顺序。例如,以下方式与按城市名称排序具有相同的效果:
cities.reindex([2, 0, 1])
重建索引是一种随机排列 DataFrame
的绝佳方式。在下面的示例中,我们会取用类似数组的索引,然后将其传递至 NumPy 的 random.permutation
函数,该函数会随机排列其值的位置。如果使用此重新随机排列的数组调用 reindex
,会导致 DataFrame
行以同样的方式随机排列。
有关详情,请参阅索引文档。