Skip to content

2.Pandas基础结构与读写 ​

2.1 Pandas 简介 ​

  • Python 开源的数据分析、处理、可视化库
  • pip3 install pandas 实现安装

💡 为什么需要 pandas

  • 不但能处理数值型数据,也可以处理字符串、时序等其他数据
  • 数据的展示
  • 聚合等丰富的数据处理函数,可实现类 SQL 对应功能

2.2 Pandas VS MySQL ​

特性PandasMySQL
定位内存中 (In-memory) 的数据分析库磁盘上 (On-disk) 的关系型数据库 (RDBMS)
主要用途数据清洗、探索性分析 (EDA)、处理、可视化数据的持久化存储、管理、高效查询
数据规模适用于 1000 万行以下 (受限于单机内存)可处理海量数据 (TB/PB 级),性能更优
灵活性极高,函数库丰富,处理逻辑可以非常复杂较高,但受限于 SQL 语法和表结构
上手速度上手快 (30 分钟),但 API 庞大,精通较难SQL 语法学习成本低,但数据库运维 (ETL, 赋权) 复杂
生态/更新更新快,与 PyData (NumPy, Scikit-learn) 紧密集成相对稳定、成熟

2.3 Pandas 数据结构 ​

  • pandas. 等价于 pd.
  • pandas.DataFrame 和 pandas.Series 是 Pandas 最重要的两个数据结构
  • pandas.DataFrame 表格,是常见概念
  • pandas.Series 序列是新概念,可以理解为一列

Pandas

2.3.1 pandas.DataFrame ​

创建数组 pandas.DataFrame(data, index, columns)

  1. index 定义行索引
  2. columns 定义列索引
  3. data 可为 python 列表、字典、或 numpy 数组
  4. 字典 keys 为列索引名,可以依旧设置 columns
  5. 输出列以 columns 优先,字典中未定义数据的列填充 NaN

2.3.2 pandas.Series ​

创建序列 pandas.Series

  1. index 定义序列索引
  2. 类似 列表,但索引可自定义
  3. data 可为 python 列表、字典或 numpy 数组
  4. 注意字典的 key 为行索引值!

Pandas-1

2.3.3 比较 ​

  • pandas.DataFrame
    • df.shape
    • df.reshape
  • pandas.Series
    • ds.shape
  • pandas.DataFrame or Series or NumPy
    • df.values or ds.values → numpy.ndarray
    • df[column] → pandas.Series
    • pandas.DataFrame(ds) → pandas.DataFrame

2.3.4 描述 DataFrame 和 Series 的信息 ​

  1. 基本信息
    • shape 形状
    • dtypes 数据类型
    • ndim 维度
    • index 行索引
    • columns 列索引
    • values 元素值 numpy 数组
  2. 整体信息
    • head(n)/tail(n) :展示前 n 行 / 后 n 行
    • df.info() :行数、列数、行索引、列索引、数据类型、列非空值个数、占用内存大小
    • df.describe(): 计数、均值、标准差、最大值、最小值、四分位数

2.4 Pandas 数据读写 ​

2.4.1 Pandas 从文件中读数据 ​

读取支持 csv, excel, txt, parquet, json, sql_table, sql_query 等格式 (优点)

函数 pandas.read_csv(file_path, sep, header, names, index_col)

  1. sep 一般为 ','
  2. header 取决于数据第一行是否为列名
  3. names 优先级高于 header,定义列索引名
  4. index_col 决定特定列是否被识别为 pandas index

2.4.2 Pandas 写入到文件 ​

写入支持的数据格式与读取的数据格式一一对应

读取函数写入函数说明
read_csvto_csvCSV 文本
read_excelto_excelExcel 文件
read_hdfto_hdfHDF5 存储
read_sqlto_sql数据库
read_jsonto_jsonJSON 格式
read_htmlto_html网页表格
read_statato_stataStata 数据
read_clipboardto_clipboard剪贴板
read_pickleto_picklePython 序列化

➤ 案例 1:读取 3 个 csv 文件并且输出到 1 个 excel 文件

  • 需要额外安装 xlrd 包
  • 三个 df,输出到 excel 的三个 sheet
  • 代码见 notebook
  • 大家可以尝试完成逆操作(1 个 excel 写入到 3 个 csv)

2.5 Pandas 数据类型 ​

  • datetime:日期时间类型(表示具体的年月日、时分秒)
  • timedelta:时间差类型(表示两个时间之间的差值,例如 3 天、5 小时)
  • category:分类类型(用于存储有限类别值,例如“男/女”“高/中/低”)
Pandas dtypeNumPy dtypePython typeUsage
objectstring_unicodestr字符串
int64intx, uintxint整数
float64floatxfloat浮点数
boolbool_bool布尔型
datetime64datetime64NA时间
timedeltatimedeltaNA时间差
categoryNANA类别

2.6 Pandas 基础索引 ​

💡 为什么使用索引

方便的数据查询 性能提升 数据对齐 更多数据结构

函数:

  1. df[]
  2. df.index 或 df.column_name
    • 注意当列名与 DataFrame 方法名相同时,无法使用 df.column_name
    • 如 df.min,但可使用 df['min'] 取列数据
  3. df.loc[行键索引, 列键索引]
  4. df.iloc[行计数索引, 列计数索引]
  5. df.where(条件)

Pandas-2

2.6.1 Pandas 基础索引 - loc ​

Pandas-3

2.6.2 Pandas 基础索引 - iloc ​

Pandas-4

2.6.3 Pandas 基础索引 - where ​

Pandas-5

2.6.4 Pandas 基础索引 - 扩展说明 ​

  1. df.where 与 numpy.where
  2. df.where(条件, other) 不满足条件的填充 other
  3. numpy.where(条件, x, y) 满足条件填 x,不满足填 y
  4. 多重列条件时可用 numpy.select(条件列表, 填充值列表, default)

2.6.5 Pandas 基础索引 - query ​

筛选行

  1. df.query(字符串)
  2. df[(df['a'] < df['b']) & (df['b'] < df['c'])]
  3. 可改写为 df.query('a < b and b < c')
  4. 与 df.query('a < b & b < c') 相同吗(×)
  5. df.query('b == ["a", "b", "c"]') == df[df['b'].isin(['a', 'b', 'c'])]

基于 MIT 许可发布