Pandas入门与数据结构

Pandas入门与数据结构

2026年9月20日·#编程学习/python学习笔记Python/数据分析·1262 字 6 分钟
浏览量加载中...
AI 摘要

Pandas 的 DataFrame 与 Series 是什么、四种构建方式和常用属性(index/columns/values/shape 等)

Pandas 是什么#

Pandas 是一个功能强大的结构化数据分析工具集,底层基于 Numpy 构建,在数据分析和大数据开发场景中都有显著优势。

官网:https://pandas.pydata.org

安装(注意是 pip,不是 npm):

Terminal window
pip install pandas
Warning

课程 PPT 上写的 npm install pandas 是笔误——npm 是 Node.js 的包管理器,Python 用 pip

两个核心数据结构#

结构是什么类比
DataFrame表格型的数据结构,有行有列一张 Excel 表格
Series一列数据DataFrame 中的单独一列

概念对应关系:index(索引,行号或行标签)、column(列名)、row(一行)。

初体验:统计各科成绩#

需求:基于 Pandas 统计班级学员各科成绩的最高分、最低分、平均分。

import pandas as pd
# 构造 DataFrame —— 创建数据集(学员成绩信息)
df = pd.DataFrame([
{"姓名": "小王", "语文": 90, "数学": 80, "英语": 70},
{"姓名": "小李", "语文": 80, "数学": 90, "英语": 80},
{"姓名": "小张", "语文": 70, "数学": 80, "英语": 90},
])
# 统计计算
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}")

:.2f 表示保留两位小数。取出一列后,max() / min() / mean() 这些统计方法直接就能用。

DataFrame 的四种构建方式#

import pandas as pd
# 1. 列表套字典:每个字典是一行
df1 = pd.DataFrame([
{'姓名': '王林', '语文': 80, '英语': 90, '数学': 88},
{'姓名': '李慕婉', '语文': 92, '英语': 81, '数学': 93},
])
# 2. 字典套列表:键是列名,值是该列的数据
df2 = pd.DataFrame({
'姓名': ['王林', '李慕婉'],
'语文': [80, 92],
'英语': [90, 81],
'数学': [88, 93],
})
# 3. 列表套元组 + columns 指定列名
df3 = pd.DataFrame([
('王林', 80, 90, 88),
('李慕婉', 92, 81, 93),
], columns=['姓名', '语文', '英语', '数学'])
# 4. 在 3 的基础上再指定自定义行索引
df4 = pd.DataFrame([
('王林', 80, 90, 88),
('李慕婉', 92, 81, 93),
], columns=['姓名', '语文', '英语', '数学'], index=['a', 'b'])

DataFrame 常见属性#

属性作用
df.index获取行索引
df.columns获取列名(DataFrame 特有)
df.values获取值(二维数组)
df.size获取单元格的数量
df.dtypes获取每一列的数据类型
df.shape获取数据维度(行, 列)

Series 的构建与属性#

import pandas as pd
s1 = pd.Series([10, 20, 30, 40, 50]) # 列表
s2 = pd.Series((10, 20, 30, 40, 50), index=['a', 'b', 'c', 'd', 'e']) # 元组 + 自定义索引
s3 = pd.Series({'a': 10, 'b': 20, 'c': 30}) # 字典
s4 = df1['语文'] # 从 DataFrame 里取一列
属性作用
s.index获取索引
s.values获取值
s.dtype获取数据类型(Series 是单数 dtype)
s.size获取数据个数
s.shape获取数据维度(行,)——只有一个维度
Tip

记法:DataFrame 有 columns、类型是 dtypes(复数);Series 没有 columns、类型是 dtype(单数)。

相关#

练习题#

一、回忆填空(写完再展开对答案)#

  1. Pandas 是____分析工具集,底层基于 ____ 构建
  2. 两个核心结构:____ 像一张 Excel 表格;____ 像表格中的一列
  3. 安装命令:____ install pandas
  4. DataFrame 取列名用 df.____、取维度用 df.____、取单元格数量用 df.____、取每列类型用 df.____
  5. Series 取数据类型用 s.____(单数),DataFrame 用 df.____(复数)
  6. df['语文'].____() 求平均分;max() 求最大值、min() 求最小值
  7. 构造 DataFrame 时用参数 ____ 指定列名,用参数 ____ 指定行索引
填空答案(做完再点开)
  1. 结构化数据 / Numpy 2. DataFrame / Series 3. pip 4. columns / shape / size / dtypes 5. dtype / dtypes 6. mean 7. columns / index

二、裸写题#

  • 2-1 构造 DataFrame 用”字典套列表”的方式造一个 3 名学员的成绩表(列:姓名、语文、数学),打印 shapecolumns

    提示(先自己想,实在想不出再点开)

    一级 · 思路:列名当字典的键,每列的数据当值 二级 · 方法pd.DataFrame({...}) 三级 · 骨架df = pd.DataFrame({"姓名": [...], "语文": [...], "数学": [...]})

  • 2-2 取属性 对上面造出的表,分别打印:行索引、列名、值、单元格数量、每列类型、维度。

    提示

    一级 · 思路:六个属性各一行 二级 · 方法index / columns / values / size / dtypes / shape 三级 · 骨架print(df.index.tolist())(转成列表看得更清楚)

  • 2-3 统计一列 取出”语文”这一列,打印最高分、最低分、平均分(平均分保留两位小数)。

    提示

    一级 · 思路:先取列,再用统计方法 二级 · 方法df['语文'].max() / .min() / .mean() 三级 · 骨架f"{df['语文'].mean():.____}" 保留两位小数

参考答案(做完再点开)
import pandas as pd
# 2-1
df = pd.DataFrame({
"姓名": ["小王", "小李", "小张"],
"语文": [90, 80, 70],
"数学": [80, 90, 80],
})
print(df.shape) # (3, 3)
print(df.columns.tolist()) # ['姓名', '语文', '数学']
# 2-2
print(df.index.tolist()) # [0, 1, 2]
print(df.columns.tolist())
print(df.values.tolist())
print(df.size) # 9
print(df.dtypes)
print(df.shape) # (3, 3)
# 2-3
print(f"最高分: {df['语文'].max()}, 最低分: {df['语文'].min()}, 平均分: {df['语文'].mean():.2f}")

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc3# CSS6# DeepSeek6# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP5# ImageManager1# Java23# java13# JavaScript5# JDBC3# JSON2# JUnit1# LangChain25# Logback1# Maven6# Muse Spark1# Mybatis1# MyBatis4# MySQL28# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python65# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue7# Waline3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端32# 动态1# 动漫1# 包1# 单词2# 博客7# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 对象1# 导航栏1# 工具2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程1# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常92# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试1# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]