从小白到大师,这里有一份Pandas入门指南
作者:网友投稿 时间:2019-08-18 09:24
Pandas 发展现状;
内存优化;
索引;
方法链;
随机提示。
在阅读本文时,我建议你阅读每个你不了解的函数的文档字符串(docstrings)。简单的 Google 搜索和几秒钟 Pandas 文档的阅读,都会使你的阅读体验更加愉快。
一、Pandas 的定义和现状
1. 什么是 Pandas?
Pandas 是一个「开源的、有 BSD 开源协议的库,它为 Python 编程语言提供了高性能、易于使用的数据架构以及数据分析工具」。总之,它提供了被称为 DataFrame 和 Series(对那些使用 Panel 的人来说,它们已经被弃用了)的数据抽象,通过管理索引来快速访问数据、执行分析和转换运算,甚至可以绘图(用 matplotlib 后端)。
Pandas 的当前最新版本是 v0.25.0
(https://github.com/pandas-dev/pandas/releases/tag/v0.25.0)

Pandas 正在逐步升级到 1.0 版,而为了达到这一目的,它改变了很多人们习以为常的细节。Pandas 的核心开发者之一 Marc Garcia 发表了一段非常有趣的演讲——「走向 Pandas 1.0」。
演讲链接:https://www.youtube.com/watch?v=hK6o_TDXXN8
用一句话来总结,Pandas v1.0 主要改善了稳定性(如时间序列)并删除了未使用的代码库(如 SparseDataFrame)。
2. 数据
让我们开始吧!选择「1985 到 2016 年间每个国家的自杀率」作为玩具数据集。这个数据集足够简单,但也足以让你上手 Pandas。
数据集链接:
https://www.kaggle.com/russellyates88/suicide-rates-overview-1985-to-2016
在深入研究代码之前,如果你想重现结果,要先执行下面的代码准备数据,确保列名和类型是正确的。
import pandas as pd
import numpy as np
import os
# to download https://www.kaggle.com/russellyates88/suicide-rates-overview-1985-to-2016
data_path = 'path/to/folder/'
df = (pd.read_csv(filepath_or_buffer=os.path.join(data_path, 'master.csv'))
.rename(columns={'suicides/100k pop' : 'suicides_per_100k', ' gdp_for_year ($) ' : 'gdp_year', 'gdp_per_capita ($)' : 'gdp_capita', 'country-year' : 'country_year'})
.assign(gdp_year=lambda _df: _df['gdp_year'].str
.replace(',','').astype(np.int64)) )
提示:如果你读取了一个大文件,在 read_csv(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html)中参数设定为 chunksize=N,这会返回一个可以输出 DataFrame 对象的迭代器。
这里有一些关于这个数据集的描述:

>>> df.columnsIndex(['country', 'year', 'sex', 'age', 'suicides_no', 'population', 'suicides_per_100k', 'country_year', 'HDI for year', 'gdp_year', 'gdp_capita', 'generation'], dtype='object')
这里有 101 个国家、年份从 1985 到 2016、两种性别、六个年代以及六个年龄组。有一些获得这些信息的方法:
可以用 unique() 和 nunique() 获取列内唯一的值(或唯一值的数量);
>>> df['generation'].unique()
array(['Generation X', 'Silent', 'G.I. Generation', 'Boomers', 'Millenials', 'Generation Z'], dtype=object)
>>> df['country'].nunique()
101
可以用 describe() 输出每一列不同的统计数据(例如最小值、最大值、平均值、总数等),如果指定 include='all',会针对每一列目标输出唯一元素的数量和出现最多元素的数量;

可以用 head() 和 tail() 来可视化数据框的一小部分。
通过这些方法,你可以迅速了解正在分析的表格文件。
二、内存优化
在处理数据之前,了解数据并为数据框的每一列选择合适的类型是很重要的一步。
在内部,Pandas 将数据框存储为不同类型的 numpy 数组(比如一个 float64 矩阵,一个 int32 矩阵)。
有两种可以大幅降低内存消耗的方法。
import pandas as pd
def mem_usage(df: pd.DataFrame) -> str:



