pandas 备忘

我对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教程

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 库,所以无须另行安装,例如:

  1. Anaconda(官网下载:https://www.anaconda.com/)是一个开源的 Python 发行版,包含了 180 多个科学包及其依赖项。除了支持 Windows 系统外,也支持 Linux 和 Mac 系统。

  2. Python(x,y)(下载地址:https://python-xy.github.io/)是一款基于 Python、Qt (图形用户界面)和 Spyder (交互式开发环境)开发的软件,主要用于数值计算、数据分析和数据可视化等工程项目,目前只支持 Python 2 版本。

  3. WinPython(下载地址:https://sourceforge.net/projects/winpython/files/)一个免费的 Python 发行版,包含了常用的科学计算包与 Spyder IDE,但仅支持 Windows 系统。

因为我是新手,不使用太高层的工具了,集成工具虽然方便,毕竟封装了一层,说不准它也存在问题呢(尤其是我还用着Mac M1的情况下)?网络问题啊什么的还要折腾,遂直接使用pip直接安装,也有利于掌握。

pip install pandas
pip install openpyxl

image-20221109午後35840479

hello world

image-20221109午後41047948

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)

image-20221109午後41723229

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。

image-20221109午後44217343

image-20221109午後43750874

CSV

(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。

image-20221109午後44645743

方法简单记录:

  • read_csv

  • to_csv

  • head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。

  • tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN

  • info() 方法返回表格的一些基本信息

    image-20221109午後45041932

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 数据列相关的统计信息摘要。

image-20221109午後50401569

  • 重置索引(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()

参考资料


m1 安装 python iterm2 给台前调度Stage Manager留出空间