news 2026/4/18 6:43:33

Day 48:【99天精通Python】数据分析 Pandas 入门 - Excel 的终结者

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 48:【99天精通Python】数据分析 Pandas 入门 - Excel 的终结者

Day 48:【99天精通Python】数据分析 Pandas 入门 - Excel 的终结者

前言

欢迎来到第48天!

在昨天的课程中,我们学习了 NumPy。虽然 NumPy 计算很快,但它有个缺点:它没有标签
比如一个二维数组,你很难直观地看出第 1 列是"姓名"还是"年龄"。

为了解决这个问题,基于 NumPy 构建的Pandas诞生了。它引入了两个核心数据结构:

  1. Series:带标签的一维数组(像 Excel 的一列)。
  2. DataFrame:带标签的二维表格(像整个 Excel 表)。

Pandas 是 Python 数据分析领域的绝对王者。掌握了它,你就可以轻松完成 Excel 能做的一切,以及 Excel 做不了的大数据处理。

本节内容:

  • Pandas 安装
  • Series 的创建与索引
  • DataFrame 的创建与基本属性
  • 读写文件 (read_csv, to_excel)
  • 数据的查看与基础统计
  • 实战练习:超市销售数据分析

一、安装与导入

pipinstallpandas openpyxl

按照惯例,我们在代码中这样导入:

importpandasaspdimportnumpyasnp

二、Series:带标签的数组

Series 就像是一个字典和数组的结合体。

2.1 创建 Series

# 1. 从列表创建 (默认索引 0, 1, 2...)s1=pd.Series([10,20,30])print(s1)# 0 10# 1 20# 2 30# dtype: int64# 2. 指定索引 (Index)s2=pd.Series([100,99,88],index=["Alice","Bob","Charlie"])print(s2)# Alice 100# Bob 99# Charlie 88# dtype: int64# 3. 从字典创建 (键自动变成索引)data={"Apple":5.0,"Banana":3.5,"Cherry":10.0}s3=pd.Series(data)print(s3)

2.2 索引与切片

Series 既支持数字下标,也支持标签索引。

print(s2["Alice"])# 100 (标签索引)print(s2[0])# 100 (位置下标)print(s2["Alice":"Bob"])# 切片 (包含结尾!)# Alice 100# Bob 99

三、DataFrame:表格数据

DataFrame 是 Pandas 的核心。它有行索引 (index) 和列索引 (columns)。

3.1 创建 DataFrame

# 1. 从字典列表创建 (最常用)data={"Name":["Tom","Jerry","Spike"],"Age":[10,8,12],"Score":[88,92,75]}df=pd.DataFrame(data)print(df)# Name Age Score# 0 Tom 10 88# 1 Jerry 8 92# 2 Spike 12 75

3.2 读写文件 (IO)

Pandas 最强大的地方在于一行代码读写各种格式。

# 写入 CSVdf.to_csv("students.csv",index=False)# index=False 不保存行号# 写入 Exceldf.to_excel("students.xlsx",index=False)# 读取 CSVdf_new=pd.read_csv("students.csv")

四、查看数据

当数据量很大时(几万行),我们不可能直接 print 整个 df。

# 1. 查看前几行 / 后几行print(df.head(2))# 前2行print(df.tail(1))# 后1行# 2. 查看基本信息 (列名、非空数量、类型)print(df.info())# 3. 统计摘要 (平均值、最大值、四分位数)print(df.describe())

五、数据的选取 (Selection)

Pandas 提供了多种取值方式,初学者容易晕,这里只讲最核心的。

5.1 取列 (Column)

# 取单列 (返回 Series)print(df["Name"])# 取多列 (返回新的 DataFrame)print(df[["Name","Score"]])

5.2 loc vs iloc (行选取)

  • loc: 根据标签(Label) 取值。
  • iloc: 根据整数位置(Integer) 取值。
# 设置 Name 为索引,方便演示df=df.set_index("Name")# Age Score# Name# Tom 10 88# Jerry 8 92# Spike 12 75# --- loc (标签) ---print(df.loc["Tom"])# 取 Tom 这一行print(df.loc["Tom","Score"])# 取 Tom 的 Score (88)# --- iloc (位置) ---print(df.iloc[0])# 取第0行 (Tom)print(df.iloc[0,1])# 取第0行第1列 (Score -> 88)

六、实战练习:超市销售分析

假设我们有一份销售数据:

data={"Product":["Apple","Banana","Milk","Apple","Milk"],"Price":[5,3,10,5,10],"Quantity":[10,20,5,8,12],"Region":["North","South","North","South","South"]}df=pd.DataFrame(data)

任务

  1. 计算每笔订单的销售额 (Total = Price * Quantity)。
  2. 筛选出销售额大于 50 的订单。
  3. 按区域 (Region) 统计总销售额。

代码实现

# 1. 新增一列 Total# Pandas 支持列与列直接运算 (基于 NumPy 广播机制)df["Total"]=df["Price"]*df["Quantity"]print(df)# 2. 筛选 (Boolean Indexing)# 语法同 NumPy: df[条件]high_sales=df[df["Total"]>50]print("\n--- 大额订单 ---")print(high_sales)# 3. 分组统计 (Group By)# 类似于 SQL: SELECT Region, SUM(Total) FROM table GROUP BY Regionregion_sales=df.groupby("Region")["Total"].sum()print("\n--- 区域销售额 ---")print(region_sales)# Region# North 100# South 220# Name: Total, dtype: int64

七、常见问题

Q1:lociloc怎么选?

  • 如果你知道那一行的名字(Index),用loc
  • 如果你只想遍历或者取前 10 行,用iloc

Q2:如何删除一行或一列?

使用drop方法。

  • df.drop("Age", axis=1): 删除列。
  • df.drop("Tom", axis=0): 删除行。
    注意:drop默认返回新对象,如果要在原对象修改,需加上inplace=True

Q3:SettingWithCopyWarning 是什么?

当你尝试df[df["A"]>0]["B"] = 1时会报这个警告。Pandas 不确定你是要修改原数据还是副本。
建议:使用loc显式赋值:df.loc[df["A"]>0, "B"] = 1


八、小结

Pandas 核心

数据结构

文件 IO

数据选取

Series (一维带标签)

DataFrame (二维表)

read_csv / to_csv

read_excel / to_excel

df['col'] (取列)

loc['label'] (标签取行)

iloc[0] (位置取行)

df[df['A']>0] (条件筛选)

关键要点

  1. DataFrame是我们操作的主要对象。
  2. 列操作直接用df['col'],行操作用loc/iloc
  3. 列运算非常方便(df['A'] + df['B'])。
  4. groupby是分组统计的神器。

九、课后作业

  1. 成绩表生成:创建一个包含 5 名学生、3 门课(语数外)成绩的 DataFrame。
    • 计算每个学生的总分,并新增一列Total
    • 计算每门课的平均分。
  2. 筛选不及格:在上面的成绩表中,筛选出数学不及格 (<60) 的所有学生信息。
  3. 文件转换:手动创建一个 Excel 文件data.xlsx,随便填点数据,写代码将其读取并转换为 CSV 文件。

下节预告

Day 49:Pandas 进阶 - 数据清洗与合并- 真实数据往往是脏乱差的(缺失值、重复值、格式错误)。明天我们学习如何给数据"洗澡",并将多张表拼接在一起。


系列导航

  • 上一篇:Day 47 - NumPy进阶
  • 下一篇:Day 49 - Pandas进阶(待更新)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:31:05

SGLang-v0.5.6启动命令详解:参数配置完整指南

SGLang-v0.5.6启动命令详解&#xff1a;参数配置完整指南 1. 引言 随着大语言模型&#xff08;LLM&#xff09;在实际业务场景中的广泛应用&#xff0c;如何高效部署并优化推理性能成为工程落地的关键挑战。SGLang-v0.5.6作为当前版本的稳定发布&#xff0c;提供了面向高性能…

作者头像 李华
网站建设 2026/4/18 6:31:02

TensorFlow-v2.15开箱即用:3分钟云端GPU跑通案例

TensorFlow-v2.15开箱即用&#xff1a;3分钟云端GPU跑通案例 你是不是也遇到过这样的情况&#xff1f;作为AI讲师&#xff0c;准备了一堂精彩的TensorFlow教学课&#xff0c;结果学生们的电脑五花八门——有的是老旧笔记本&#xff0c;有的没装CUDA&#xff0c;还有的连Python…

作者头像 李华
网站建设 2026/4/14 17:09:36

Qwen3-Embedding-0.6B智慧城市:市民诉求智能分拨系统实现

Qwen3-Embedding-0.6B智慧城市&#xff1a;市民诉求智能分拨系统实现 1. 背景与问题定义 随着城市治理数字化进程的加速&#xff0c;市民通过热线、政务平台、社交媒体等渠道提交的诉求量呈指数级增长。传统人工分拨模式面临响应延迟、分类不准、人力成本高等挑战。如何实现对…

作者头像 李华
网站建设 2026/4/18 3:47:54

从0开始微调DeepSeek-R1:修改模型自我认知实战教程

从0开始微调DeepSeek-R1&#xff1a;修改模型自我认知实战教程 1. 前言 在大模型应用落地过程中&#xff0c;模型的自我认知&#xff08;Self-Identity&#xff09;定制化是一个关键需求。例如&#xff0c;企业希望部署的AI助手能明确回答“我是由XX公司自主研发的AI模型”&a…

作者头像 李华
网站建设 2026/4/17 4:05:30

Qwen2.5-0.5B保姆级教程:1GB显存跑32K长文的详细步骤

Qwen2.5-0.5B保姆级教程&#xff1a;1GB显存跑32K长文的详细步骤 1. 引言 1.1 背景与目标 在边缘计算和轻量化AI部署日益重要的今天&#xff0c;如何在资源受限设备上运行高性能语言模型成为开发者关注的核心问题。通义千问Qwen2.5-0.5B-Instruct作为阿里Qwen2.5系列中最小的…

作者头像 李华
网站建设 2026/4/17 20:44:39

Open Interpreter性能优化:让Qwen3-4B运行速度提升50%

Open Interpreter性能优化&#xff1a;让Qwen3-4B运行速度提升50% 在本地AI开发场景中&#xff0c;响应延迟和推理吞吐是决定用户体验的关键指标。对于基于大语言模型的代码解释器Open Interpreter而言&#xff0c;即使使用如Qwen3-4B这样的中等规模模型&#xff0c;若未进行合…

作者头像 李华