摘要:你是否经历过打开一个 500MB 的 Excel 文件,电脑风扇狂转,鼠标变成“转圈圈”的绝望?或者为了筛选几万条数据,写了一堆复杂的 VLOOKUP 公式?对于 Android 开发者来说,如果我们能用代码像操作数据库(Room/SQLite)一样操作 Excel,岂不美哉?今天飞哥带你解锁 Python 数据分析神器 —— Pandas,它是你通往 AI 全栈开发必经的“数据加油站”。


👋 嗨,我是飞哥

大家好,我是飞哥,一个喜欢讲故事、热衷于把复杂代码翻译成“人话”的全栈开发者

记得刚转型做 AI 应用开发那会儿,我遇到过一个让我“怀疑人生”的场景:
某个周五临下班,产品经理突然甩给我一个几百兆的 CSV 文件(超过 Excel 的百万行上限),让我跑一个复杂的“用户留存率”分析。

  • 用 Excel? 刚双击打开,电脑风扇就开始咆哮,进度条卡在 99% 不动,最后直接未响应——崩了。
  • 写 Java? 我打开 IDEA,先定义一个 UserLog POJO 类(还得生成 Getter/Setter),再写个 Service,弄个 BufferedReader 读文件,还得在 try-catch 里处理 NullPointerException… 还没等我写完 main 函数,隔壁用 Python 的同事已经把报表发邮件了。

后来前辈丢给我一行 Python 代码,我才发现自己像个拿勺子挖游泳池的原始人。
这行代码就是 Pandas。那一刻,我感觉像是从“手动搬砖”升级到了“挖掘机操作手”。

今天,我就用最通俗的大白话,把这个神器介绍给你。保证你看得懂、学得会、用得上。


1. 为什么你需要 Pandas?

核心痛点:Excel 不能自动化,SQL 不能算复杂数学。

  • 场景 A:老板让你每天早上 9 点统计昨天的用户留存。用 Excel,你每天得重复一遍:打开->筛选->透视表->截图。用 Pandas,写好脚本,设置个定时任务,你可以安心睡懒觉。
  • 场景 B:你需要把两张表拼在一起(类似 SQL 的 JOIN),但数据量太大,Excel 的 VLOOKUP 跑不动。Pandas 在内存里做 Join,速度是 Excel 的几百倍。

2. 三步理解 Pandas:它到底是什么?

第一步:锚定已知 ⚓️

作为 Android 开发者,你一定熟悉 SQLite (Room) 里的“表”(Table),或者 Excel 里的“Sheet”。
Pandas 的核心对象 DataFrame,就是这样一张。它有行索引 (Index) 和列名 (Column Name)。

第二步:生动类比 📊

  • NumPy(上节课学的:【AI零基础】还在用For循环处理数据?带你用NumPy把Python速度提升100倍):就像是 Bitmap。它是纯数字的矩阵,虽然快,但你看不到列名,不知道每一列代表什么。
  • Pandas:就像是 超级加强版的 Excel。它给 NumPy 的矩阵穿上了一件“衣服”——加上了行头和列头。而且,它每一列可以是不同的数据类型(第一列是 String,第二列是 Int,第三列是 Date),这不就是数据库表吗?

第三步:提炼骨架 🦴

Pandas 有两个核心概念,记不住也没关系,用着用着就懂了:

  1. Series:一列数据(其实就是带索引的 NumPy 数组)。
  2. DataFrame:多列数据拼成的表格(由多个 Series 组成)。

3. 实战:Pandas 核心操作速查

⚠️ 避坑指南:本节代码请按顺序执行!
数据处理就像工厂流水线,后面的步骤往往依赖前面处理好的数据 (df)。如果你跳着运行,可能会报错哦。

首先,确保你安装了 Pandas:

pip install pandas

3.1 创建与读取:把数据加载进内存

Pandas 支持读取 CSV, Excel, SQL, JSON 等各种格式。这里为了演示,我们先手动造一点数据。

import pandas as pd

# 1. 手动创建 (测试用)
data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, None], # 这里的 None 会自动变成 NaN (Not a Number),代表空值
    'city': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)

print("=== 原始数据 ===")
print(df)
# 输出:
#       name   age         city
# 0    Alice  25.0     New York
# 1      Bob  30.0  Los Angeles
# 2  Charlie   NaN      Chicago

3.2 查看数据:先做个“体检”

拿到数据第一件事,千万别急着处理,先看看它长啥样。就像医生看病,先得望闻问切。

# 1. 看前几行 (类似 SQL 的 SELECT * LIMIT 5)
# 飞哥解读:先看看这瓜保不保熟,数据长啥样心里有个底
print("\n=== 1. head() 看前几行 ===")
print(df.head())

# 2. 看体检报告 (最重要!看字段类型和空值)
# 飞哥解读:这是最关键的一步!一眼就能看出哪里缺了数据 (NaN),哪里类型不对
print("\n=== 2. info() 看结构 ===")
print(df.info())
# 输出解读:
# age     2 non-null      float64  <-- 看到这里只有2个非空,说明有1个空值!需要处理!

# 3. 看统计摘要 (秒懂数据分布)
# 飞哥解读:不用自己算平均值、最大值,Pandas 瞬间帮你算好
print("\n=== 3. describe() 看统计 ===")
print(df.describe())
# 输出解读:
# count   2.000000  <-- 有效数据只有2条
# mean   27.500000  <-- 平均年龄 27.5

3.3 数据清洗:处理“脏”数据

这是数据分析中最耗时的一步。就像盖房子前要先平整土地,数据不干净,后面算出来的结果全是错的。

# 1. 填充空值:把所有缺失的年龄填为 0
# 飞哥解读:fillna 就是“填坑”。这里我们简单粗暴地把空值填成 0,实际场景可能填平均值
# fillna(0) 会返回一个新的 Series,我们需要把它赋值回去
df['age'] = df['age'].fillna(0)
print("\n=== 填充空值后 ===")
print(df)
# Charlie 的 age 从 NaN 变成了 0.0

# 2. 类型转换:把 age 从浮点数转为整数
# 飞哥解读:强迫症福利。把 25.0 变成 25,看着舒服多了
# 注意:只有填完了空值,才能安全地转为 int,否则会报错
df['age'] = df['age'].astype(int)
print("\n=== 转整数后 ===")
print(df)
# Charlie 的 age 变成了 0 (整数)

3.4 列的操作:像操作 Excel 一样简单

# 1. 新增一列:明年多少岁?
# 飞哥解读:这一行代码,会自动应用到每一行数据上。不用写 for 循环,爽不爽?
df['age_next_year'] = df['age'] + 1

# 2. 修改一列:把城市名转大写
# 飞哥解读:.str 就像是给 Pandas 装了个“字符串处理插件”,里面有各种 String 方法
df['city'] = df['city'].str.upper()

print("\n=== 新增列 & 修改列后 ===")
print(df)
# 输出:
#       name  age         city  age_next_year
# 0    Alice   25     NEW YORK             26
# 1      Bob   30  LOS ANGELES             31
# 2  Charlie    0      CHICAGO              1

# 3. 删除一列
df = df.drop(columns=['age_next_year'])

3.5 数据筛选 (Filter) & 分组 (Group By)

这一块完全对应 SQL 的 WHEREGROUP BY

# === SQL: SELECT * FROM user WHERE age > 25 ===
# 飞哥解读:这语法直观得像在说英语:df 里的 age 大于 25 的行,拿出来
adults = df[df['age'] > 25]
print("\n=== 年龄大于25的人 ===")
print(adults)
# 输出: 只有 Bob

# === SQL: SELECT city, count(*) FROM user GROUP BY city ===
# 飞哥解读:按城市分组,然后数数 (size)。一行代码顶 Excel 十步操作
city_counts = df.groupby('city').size()
print("\n=== 每个城市的人数 ===")
print(city_counts)
# 输出: CHICAGO 1, LOS ANGELES 1, NEW YORK 1

3.6 保存结果

分析完了,一行代码导出。

# 保存为 CSV (index=False 代表不保存行号 0,1,2)
df.to_csv("result.csv", index=False)
print("\n已保存到 result.csv")

4. 小贴士 💡

很多转型同学会问:“这不就是数据库操作吗?我直接用 SQL 不行吗?”

飞哥的经验是:

  • SQL :适合存取数据。它擅长增删改查,保证数据持久化。
  • Pandas:适合分析数据。它在内存里跑,擅长复杂的数学计算、统计、透视表,而且语法比 SQL 灵活得多(尤其是处理时间序列和字符串时)。

一句话记住它:Pandas 就是 “可编程的 Excel”,它让你用代码就能完成 Excel 能做的一切,而且能自动处理海量数据。

我是飞哥,一名 AI 探索者。
如果这篇文章对你有帮助,欢迎 点赞、收藏、关注!下篇文章见👋🏻

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐