【Python数据分析利器】Pandas从入门到实战:核心数据结构DataFrame与Series全解析

在数据科学和大数据开发领域,Pandas 无疑是最璀璨的明星工具之一。它底层基于 NumPy 构建,提供了高性能、易用的数据结构和丰富的数据分析函数,极大地简化了数据清洗、转换与统计分析的开发流程。

⚠️ 环境准备 :

注意在 Python 环境中使用 pip 安装(而非 npm):

bash 复制代码
pip install pandas

🎯 什么是 DataFrame 与 Series?

Pandas 的世界主要由两大核心数据结构支撑:

  1. DataFrame:表格型的数据结构,就像一张 Excel 表格或 SQL 表,既有行索引(Index),也有列索引(Columns)。
  2. Series:一维标记数组,就像表格中的单独一列。

核心关系:DataFrame 是由多个具有相同索引的 Series 组成的二维容器;从 DataFrame 中抽取任意一列,拿到的就是一个 Series。


🚀 实战案例:统计班级各科成绩

业务需求

统计某班级学员在"语文"、"数学"、"英语"三门课程中的最高分 、最低分 与平均分。

代码实现

python 复制代码
import pandas as pd

# 1. 构造 DataFrame 数据集
df = pd.DataFrame([
    {'姓名': '张三', '语文': 85, '数学': 92, '英语': 78},
    {'姓名': '李四', '语文': 78, '数学': 88, '英语': 95},
    {'姓名': '王五', '语文': 92, '数学': 96, '英语': 89},
    {'姓名': '赵六', '语文': 85, '数学': 90, '英语': 90},
    {'姓名': '孙七', '语文': 72, '数学': 59, '英语': 66},
    {'姓名': '周八', '语文': 80, '数学': 76, '英语': 68},
])

# 2. 统计计算(调用单列 Series 聚合函数)
print(f"语文 -> 最高分: {df['语文'].max()}, 最低分: {df['语文'].min()}, 平均分: {df['语文'].mean():.2f}")
print(f"数学 -> 最高分: {df['数学'].max()}, 最低分: {df['数学'].min()}, 平均分: {df['数学'].mean():.2f}")
print(f"英语 -> 最高分: {df['英语'].max()}, 最低分: {df['英语'].min()}, 平均分: {df['英语'].mean():.2f}")

🔥 进阶小技巧 :

如果想快速查看所有数值列的统计指标,可以直接使用 df.describe(),计数、均值、极值、分位数一览无余!


🛠️ 核心进阶:DataFrame 的常用构建方式

在实际项目中,数据来源多种多样,Pandas 提供了极具弹性的构造方式:

方式 1:列表嵌套字典(按行解析)

每个字典代表一行数据,字典的 key 自动作为列名:

python 复制代码
df1 = pd.DataFrame([
    {'姓名': '张三', '语文': 85, '数学': 92, '英语': 78},
    {'姓名': '李四', '语文': 78, '数学': 88, '英语': 95},
    {'姓名': '王五', '语文': 92, '数学': 96, '英语': 89}
])

方式 2:字典嵌套列表(按列解析,最推荐)

每个 key 是列名,对应的 list 为该列的所有取值:

python 复制代码
df2 = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '语文': [85, 78, 92],
    '数学': [92, 88, 96],
    '英语': [78, 95, 89]
})

方式 3:元组列表 + columns 参数

传入二维元组列表,并通过 columns 参数定义表头:

python 复制代码
df3 = pd.DataFrame([
    ('张三', 85, 92, 78),
    ('李四', 78, 88, 95),
    ('王五', 92, 96, 89)
], columns=['姓名', '语文', '数学', '英语'])

方式 4:二维列表 + columns + index

在定义数据和列名的同时,显式指定行索引(index):

python 复制代码
df4 = pd.DataFrame([
    ['张三', 85, 92, 78],
    ['李四', 78, 88, 95],
    ['王五', 92, 96, 89]
], columns=['姓名', '语文', '数学', '英语'], index=['a', 'b', 'c'])

🛠️ 核心进阶:Series 的常用构建方式

Series 是一维标记数组,常见构建方式如下:

python 复制代码
import pandas as pd

# 1. 普通列表构建(默认自动生成 0, 1, 2... 数字索引)
s1 = pd.Series([10, 20, 30, 40, 50])

# 2. 元组构建并指定自定义标签索引(index)
s2 = pd.Series((10, 20, 30, 40, 50), index=['a', 'b', 'c', 'd', 'e'])

# 3. 字典构建(字典 key 自动转化为 Series 的 index)
s3 = pd.Series({'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50})

# 4. 从已有的 DataFrame 中抽取某列
s4 = df1['语文']
s5 = df1['数学']

📋 必备速查:DataFrame 与 Series 常见属性

熟练掌握基础属性,能让你在处理数据清洗和维度变换时更加游刃有余:

属性名称 作用说明 适用对象 示例输出
xx.shape 获取数据维度(行数, 列数) DataFrame / Series (6, 4)
xx.columns 获取所有列名/列标签 DataFrame 特有 Index(['姓名', '语文', ...])
xx.index 获取行标签/行索引 DataFrame / Series RangeIndex(start=0, stop=6)
xx.values 获取纯数据底层表示(NumPy ndarray) DataFrame / Series array([[...], [...]])
xx.dtype 获取单列的数据类型 Series 特有 int64 / object
xx.dtypes 获取各列对应的数据类型 DataFrame 特有 各字段类型列表
xx.size 获取数据元素的总个数(行 × 列) DataFrame / Series 24

示例代码

python 复制代码
# 查看 DataFrame 的维度与字段名
print(df.shape)    # (6, 4)
print(df.columns)  # Index(['姓名', '语文', '数学', '英语'], dtype='object')

# 查看 Series 的类型与值
print(df['语文'].dtype)   # int64
print(df['语文'].values)  # [85 78 92 85 72 80]

💡 总结与回顾

  1. 基本模型 :Pandas 的基石是 Series(一维序列)和 DataFrame(二维表格)。
  2. 统计计算 :借助 .max()、.min()、.mean() 等聚合函数,能秒级完成批量统计。
  3. 数据感知 :通过 .shape 查维度、.columns 查表头、.index 查索引、.values 探底层,是数据探查的第一步。
相关推荐
waoooqwe几秒前
有没有自带问卷互填社区的问卷平台?
数据分析·问卷调研·问卷收集·样本收集
马良神笔16 分钟前
2026 年Rag最近技术前沿总结
后端·python·django
不像程序员的程序媛44 分钟前
maven基础
python·pycharm·maven
xiaogai_gai2 小时前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单
大数据·数据库·python
databook2 小时前
使用命令行做描述性统计的技巧
数据分析·命令行
benchmark_cc2 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
wang_yb2 小时前
使用命令行做描述性统计的技巧
数据分析·databook
const_qiu2 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
估值探索者3 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口
烂蜻蜓3 小时前
Pandas入门教程(六):数据读写详解——CSV、JSON、Pickle 与格式选型
json·pandas