Pandas 数组/标量/数据类型参考手册(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在数据科学与数据分析领域,Pandas 是 Python 中最强大的数据处理库之一。无论是处理表格数据、时间序列,还是进行复杂的统计分析,开发者都需要深刻理解其核心概念:数组、标量和数据类型。本文将系统性地解析这三个概念,通过实际案例和代码示例,帮助读者构建清晰的知识框架,并掌握如何高效利用这些特性优化数据处理流程。


一、Pandas 数组:数据的容器与结构

1.1 什么是 Pandas 数组?

在 Pandas 中,数组通常指 Series(一维数组)和 DataFrame(二维表格数组)。它们是 Pandas 的核心数据结构,用于存储和操作数据。

  • Series 类似于 Excel 的单列数据,例如学生成绩表中的“数学成绩”列。
  • DataFrame 则是多个 Series 的集合,相当于 Excel 的完整表格,包含行和列。

比喻:可以将 DataFrame 想象为“数据仓库”,而 Series 是仓库中的“货架”,每个货架存储特定类型的数据。

import pandas as pd

scores = pd.Series([85, 90, 78, 92], index=["Alice", "Bob", "Charlie", "David"])
print(scores)  # 输出:索引与数值的对应关系

data = {
    "Name": ["Alice", "Bob", "Charlie", "David"],
    "Age": [25, 28, 22, 30],
    "Salary": [50000, 60000, 45000, 70000]
}
df = pd.DataFrame(data)
print(df)

1.2 数组的基本操作

数组的常见操作包括索引、切片、筛选和计算。例如:

selected_columns = df[["Name", "Salary"]]

filtered_rows = df[df["Age"] > 25]

average_age = df["Age"].mean()

二、数据类型:Pandas 的底层逻辑

2.1 数据类型的分类

Pandas 中的数据类型(Dtype)决定了数据的存储方式和计算效率。常见的类型包括:
| 类型名称 | 描述 | 示例 | |------------------|----------------------------------------------------------------------|--------------------------| | int64 | 整数类型,64 位存储空间 | 100, -5 | | float64 | 浮点数类型,支持小数 | 3.14, -0.5 | | object | 字符串或其他 Python 对象 | "Hello", [1, 2] | | datetime64 | 时间戳类型,存储日期和时间 | "2023-09-01 14:30:00" | | category | 分类类型,用于存储有限数量的离散值 | "Male", "Female" |

比喻:数据类型如同“数据护照”,它告诉 Pandas 如何存储和处理每个值,例如整数和字符串的计算规则完全不同。

2.2 数据类型的重要性

数据类型的正确选择直接影响内存使用和计算速度。例如:

  • 使用 int32 而非 int64 可以减少内存占用(每个元素从 8 字节降至 4 字节)。
  • 对于分类数据(如性别、省份),使用 category 类型可显著加速排序和分组操作。
print(df.dtypes)

df["Age"] = df["Age"].astype("int32")

2.3 自动类型推断与问题排查

Pandas 在读取数据时会自动推断列类型,但有时会出错。例如,包含缺失值的整数列可能被推断为 float64(因为 NaN 是浮点值)。

df["Salary"] = pd.to_numeric(df["Salary"], errors="coerce")  # 转换失败时设为 NaN

三、标量类型:单个数据的表示

3.1 标量与数组的关系

标量(Scalar)是单个值,例如数字、字符串或布尔值,而数组是标量的集合。在 Pandas 中,标量常用于:

  • 数据筛选的条件(如 df[df["Age"] > 30])。
  • 填充缺失值(如 df.fillna(0))。

3.2 特殊标量:NaN 和 NaT

  • NaN(Not a Number)表示数值型缺失值。
  • NaT(Not a Time)表示日期时间型缺失值。
print(pd.isnull(df["Age"]))  # 返回布尔数组,标记缺失值位置

df["Age"].fillna(25, inplace=True)  # 用整数 25 填充缺失值

3.3 标量与数组的运算

标量与数组的运算会自动广播(Broadcasting),即标量与数组中的每个元素进行操作。

df["Salary"] = df["Salary"] * 1.10

四、数据类型转换与优化

4.1 显式类型转换

通过 astype() 方法强制转换数据类型,需注意兼容性:

df["Date"] = pd.to_datetime(df["Date"])

df["Gender"] = df["Gender"].astype("str")

4.2 数据类型优化技巧

  • 内存优化:使用 category 类型代替 object
  • 计算效率:优先使用原生 Pandas 方法而非 Python 循环。
df["City"] = df["City"].astype("category")

五、常见问题与解决方案

5.1 类型错误:混合类型列

当一列同时包含数值和字符串时,Pandas 会将其推断为 object 类型,导致计算失败。

解决方法

numeric_values = df["Mixed_Column"].apply(lambda x: isinstance(x, (int, float)))

df["Clean_Column"] = df["Mixed_Column"][numeric_values].astype("float64")

5.2 处理日期时间数据

日期格式的统一化是关键:

df["Order_Date"] = pd.to_datetime(df["Order_Date"], format="%Y-%m-%d")

df["Year"] = df["Order_Date"].dt.year
df["Month"] = df["Order_Date"].dt.month

六、结论

Pandas 数组/标量/数据类型参考手册 是数据处理的核心工具箱。通过理解数组结构、数据类型的底层逻辑,以及标量的灵活应用,开发者可以更高效地完成数据清洗、分析和可视化任务。本文提供的代码示例和优化技巧,旨在帮助读者在实际项目中快速解决常见问题,并为进阶学习打下坚实基础。

关键词布局提示(仅作参考,实际文章中自然融入):

  • 在标题、小标题、表格、代码注释和结论段落中合理嵌入“Pandas 数组/标量/数据类型参考手册”关键词。
  • 通过解释数据类型转换、数组操作等场景,间接强化主题关键词的关联性。

最新发布