pandas 备忘
2022-11-10 tech python pandas 23 mins 9 图 8110 字
我对python也差不多是零基础,快忘光光了,这一篇做点简单记录。
官方API地址:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html
Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。Pandas 已经成为 Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具。
Pandas 这个名字来源于面板数据(Panel Data)与数据分析(data analysis)这两个名词的组合。在经济学中,Panel Data 是一个关于多维数据集的术语。Pandas 最初被应用于金融量化交易领域,现在它的应用领域更加广泛,涵盖了农业、工业、交通等许多行业。
Pandas 最初由 Wes McKinney(韦斯·麦金尼)于 2008 年开发,并于 2009 年实现开源。目前,Pandas 由 PyData 团队进行日常的开发和维护工作。在 2020 年 12 月,PyData 团队公布了最新的 Pandas 1.20 版本 。
在 Pandas 没有出现之前,Python 在数据分析任务中主要承担着数据采集和数据预处理的工作,但是这对数据分析的支持十分有限,并不能突出 Python 简单、易上手的特点。Pandas 的出现使得 Python 做数据分析的能力得到了大幅度提升,它主要实现了数据分析的五个重要环节:
- 加载数据
- 整理数据
- 操作数据
- 构建数据模型
- 分析数据
Pandas内置数据结构 我们知道,构建和处理二维、多维数组是一项繁琐的任务。Pandas 为解决这一问题, 在 ndarray 数组(NumPy 中的数组)的基础上构建出了两种不同的数据结构,分别是 Series(一维数据结构)DataFrame(二维数据结构):
- Series 是带标签的一维数组,这里的标签可以理解为索引,但这个索引并不局限于整数,它也可以是字符类型,比如 a、b、c 等;
- DataFrame 是一种表格型数据结构,它既有行标签,又有列标签。
安装
Python 官方标准发行版没有自带 Pandas 库,因此需要另行安装。
除了标准发行版外,还有一些第三方机构发布的 Python 免费发行版, 它们在官方版本的基础上开发而来,并有针对性的提前安装了一些 Python 模块,从而满足某些特定领域的需求,比如专门适应于科学计算领域的 Anaconda,它就提前安装了多款适用于科学计算的软件包。
对于第三方发行版而言,它们已经自带 Pandas 库,所以无须另行安装,例如:
-
Anaconda(官网下载:https://www.anaconda.com/)是一个开源的 Python 发行版,包含了 180 多个科学包及其依赖项。除了支持 Windows 系统外,也支持 Linux 和 Mac 系统。
-
Python(x,y)(下载地址:https://python-xy.github.io/)是一款基于 Python、Qt (图形用户界面)和 Spyder (交互式开发环境)开发的软件,主要用于数值计算、数据分析和数据可视化等工程项目,目前只支持 Python 2 版本。
-
WinPython(下载地址:https://sourceforge.net/projects/winpython/files/)一个免费的 Python 发行版,包含了常用的科学计算包与 Spyder IDE,但仅支持 Windows 系统。
因为我是新手,不使用太高层的工具了,集成工具虽然方便,毕竟封装了一层,说不准它也存在问题呢(尤其是我还用着Mac M1的情况下)?网络问题啊什么的还要折腾,遂直接使用pip直接安装,也有利于掌握。
pip install pandas
pip install openpyxl
hello world
Pandas Series
类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
Series 由索引(index)和列组成,函数如下:
pandas.Series( data, index, dtype, name, copy)
参数说明:
- data:一组数据(ndarray 类型)。
- index:数据索引标签,如果不指定,默认从 0 开始。
- dtype:数据类型,默认会自己判断。
- name:设置名称。
- copy:拷贝数据,默认为 False。
import pandas as pd
sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
myvar = pd.Series(sites, index = [1, 2], name="RUNOOB-Series-TEST" )
print(myvar)
DataFrame
首先要明确表格中的行与列:
- 行:row,在dataframe中可以理解为index
- 列:column
一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
DataFrame 构造方法如下:
pandas.DataFrame( data, index, columns, dtype, copy)
参数说明:
-
data:一组数据(ndarray、series, map, lists, dict 等类型)。
ndarray 是 NumPy 中的 N 维数组对象,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。ndarray 对象是用于存放同类型元素的多维数组。
-
index:索引值,或者可以称为行标签。
-
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
-
dtype:数据类型。
-
copy:拷贝数据,默认为 False。
CSV
(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。
方法简单记录:
-
read_csv
-
to_csv
-
head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。
-
tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN。
-
info() 方法返回表格的一些基本信息
json
df = pd.read_json('sites.json')
print(df.to_string())
excel
df = pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None,
usecols=None, squeeze=False,dtype=None, engine=None,
converters=None, true_values=None, false_values=None,
skiprows=None, nrows=None, na_values=None, parse_dates=False,
date_parser=None, thousands=None, comment=None, skipfooter=0,
convert_float=True, kwds)
pandas读取Excel后返回 DataFrame。
数据清洗
参考 https://www.runoob.com/pandas/pandas-cleaning.html
常用函数
- 统计函数
-
count() 统计某个非空值的数量。
-
sum() 求和
-
mean() 求均值
-
median() 求中位数
-
mode() 求众数
-
std() 求标准差
-
min() 求最小值
-
max() 求最大值
-
abs() 求绝对值
-
prod() 求所有数值的乘积。
-
cumsum() 计算累计和,axis=0,按照行累加;axis=1,按照列累加。
-
cumprod() 计算累计积,axis=0,按照行累积;axis=1,按照列累积。
-
corr() 计算数列或变量之间的相关系数,取值-1到1,值越大表示关联性越强
-
百分比变化(pct_change)
-
协方差(cov)
-
相关系数(corr)
-
排名(rank)
另外,describe() 函数显示与 DataFrame 数据列相关的统计信息摘要。
-
-
重置索引(reindex)
- reindex
- reindex_like
- rename
-
iteration遍历
- iteritems():以键值对 (key,value) 的形式遍历,以列标签为键,以对应列的元素为值。
- iterrows():以 (row_index,row) 的形式遍历行,返回一个迭代器,以行索引标签为键,以每一行数据为值。
- itertuples():返回一个迭代器,该方法会把每一行生成一个元组。
-
sorting排序
- sort_index() 行标签排序
- sort_index(axis=1) 列标签排序
- sort_values(by=’col1’) / sort_values(by=[‘col1’,’col2’]) 表示按值排序。
- sort_values() 提供了参数
kind
用来指定排序算法。这里有三种排序算法:- mergesort
- heapsort
- quicksort
-
去重函数:drop_duplicates()
-
字符串处理
- lower() 将的字符串转换为小写。
- upper() 将的字符串转换为大写。
- len() 得出字符串的长度。
- strip() 去除字符串两边的空格(包含换行符)。
- split() 用指定的分割符分割字符串。
- cat(sep=””) 用给定的分隔符连接字符串元素。
- get_dummies() 返回一个带有独热编码值的 DataFrame 结构。
- contains(pattern) 如果子字符串包含在元素中,则为每个元素返回一个布尔值 True,否则为 False。
- replace(a,b) 将值 a 替换为值 b。
- count(pattern) 返回每个字符串元素出现的次数。
- startswith(pattern) 如果 Series 中的元素以指定的字符串开头,则返回 True。
- endswith(pattern) 如果 Series 中的元素以指定的字符串结尾,则返回 True。
- findall(pattern) 以列表的形式返出现的字符串。
- swapcase() 交换大小写。
- islower() 返回布尔值,检查 Series 中组成每个字符串的所有字符是否都为小写。
- issupper() 返回布尔值,检查 Series 中组成每个字符串的所有字符是否都为大写。
- isnumeric() 返回布尔值,检查 Series 中组成每个字符串的所有字符是否都为数字。
- repeat(value) 以指定的次数重复每个元素。
- find(pattern) 返回字符串第一次出现的索引位置。
-
设置数据显示格式
- get_option()
- set_option()
- reset_option()
- describe_option()
- option_context()
-
loc/iloc
- 基于标签索引选取数据
- 基于整数索引选取数据
-
窗口函数
- rolling()
- expanding()
- ewm()
-
聚合函数
- aggregate
-
缺失值处理
-
groupby() 分组操作
- 拆分(Spliting):表示对数据进行分组;
- 应用(Applying):对分组数据应用聚合函数,进行相应计算;
- 合并(Combining):最后汇总计算结果。
-
merge() 函数
-
concat() 函数能够轻松地将 Series 与 DataFrame 对象组合在一起
-
时间
- Timestamp()
- date_range()
- to_datetime()
- Period()
- period_range()
- python内置方法 strptime()
- DatetimeIndex()
- Timedelta()
- to_timedelta()
-
sample随机抽样
-
resample数据重采样
- 降采样 /.lmklk,.lk,,,,,? llresample()
- 升采样 resample(‘D’).asfreq().head()
- 频率转换 asfreq()
- fds 插值处理 pad/ffill,backfill/bfill,interpolater(‘linear’),fillna(value)
-
分类对象(Categorical Object)。有序排列、自动去重的功能,但是它不能执行运算。
-
Pandas绘图,在 Matplotlib 绘图软件包的基础上单独封装了一个
plot()
接口,通过调用该接口可以实现常用的绘图操作- 线条绘图
- 柱状图:bar() 或 barh()
- 直方图:hist()
- 箱状箱:box()
- 区域图:area()
- 散点图:scatter()
-
读取文件
- read_csv to_csv
- read_json
- read_sql_query
- to_excel read_excel
-
索引(index)
通过索引可以从 DataFame 中选择特定的行数和列数,这种选择数据的方式称为“子集选择”。
在 Pandas 中,索引值也被称为标签(label),它在 Jupyter 笔记本中以粗体字进行显示。索引可以加快数据访问的速度,它就好比数据的书签,通过它可以实现数据的快速查找。
-
通过列索引(标签)读取多列数据。
import pandas as pd #设置"Name"为行索引 data = pd.read_csv("person.csv", index_col ="Name") # 通过列标签选取多列数据 a = data[["City","Salary"]] print(a)
-
set_index()
-
重置索引reset_index()
-
-
分层索引(Multiple Index)
在一个轴上拥有多个(即两个以上)索引层数,这使得我们可以用低维度的结构来处理更高维的数据。
分层索引的目的是用低维度的结构(Series 或者 DataFrame)更好地处理高维数据。
- MultiIndex()
- 分层索引切片取值
- 聚合函数应用
- 局部索引
- 行索引层转换为列索引
- 交换层
- 层排序
-
执行SQL操作
-
NumPy
Pandas 是在 NumPy 的基础构建而来
熟悉 NumPy 可以更加有效的帮助我们使用 Pandas。
NumPy 主要用 C语言编写,因此,在计算还和处理一维或多维数组方面,它要比 Python 数组快得多。
-
使用注意事项
- if 语句
- 布尔运算
- isin()
- reindex()