学径XUEJING · 个人学习平台通知设置

课程库 AI 主线 pandas 数据处理 › 第 3

读取与查看数据 —— read_csv、head、info、describe

普通课55 分钟

本课导读

真实的数据分析从来不是自己敲数据,而是读别人给的文件。本课学 pandas 的进货动作 read_csv,以及拿到任何一份新数据后的"入库体检三板斧":head 看长相、info 看体质、describe 看指标。这套流程是数据人拿到新表的条件反射——面试里让你"先看看这份数据",考的就是它。预计 55 分钟。

read_csv:一行进货

先自备一份道具数据(沙盒约定),然后见证 U1.3 手工 CSV 处理的"工业化版本":

Python

对比 U1.3 的手工流程(open → DictReader → 逐行转类型),read_csv 一行全包了。更重要的是它悄悄做对了一件大事——看下一节。

体检三板斧

拿到任何新数据,先跑这三下再说话:

Python

逐板斧解读:

  • head 答"长什么样":列名对不对、数据像不像话。真实表动辄几十万行,print(df) 会刷屏——head 只看头几行,是刻进肌肉的第一动作
  • info 答"体质如何":重点看两处——每列的 Dtype(数据类型)和 Non-Null Count(非空数量)。8 行数据某列只有 6 个非空?缺失值警报(下下课处理它)
  • describe 答"数值什么水平":count/mean/min/max/中位数一次全出。看一眼 min 和 max 常能立刻发现离谱值(价格是负数?年龄 300 岁?)

info 里藏着的大新闻:类型自动转换

对着 info 的输出看 Dtype 列:priceqtyint64(整数),不是字符串!回想 U1.3 的大坑——csv 模块读出来全是字符串,算账前要挨个 int()read_csv 自动推断了每列的类型

Python

这就是"pandas 帮了你什么"的第一个答案。但别全托付——类型推断也会失手(一列数字里混进一个 "缺货",整列被迫降级成字符串),所以 info 检查 Dtype 永远是必修动作。失手了怎么救?清洗课见。

常用读取参数,先认识三个

import pandas as pd

df = pd.read_csv("orders.csv")                  # 标准姿势,多数时候够用
df_peek = pd.read_csv("orders.csv", nrows=3)    # 超大文件先读几行踩踩点
print(len(df), len(df_peek))

# 乱码急救(示意):打开是乱码,多半是老 Excel 导出的 GBK 编码
# df = pd.read_csv("legacy.csv", encoding="gbk")

记住排障口诀即可:乱码调 encoding,太大用 nrows。其他参数等真遇到再查——read_csv 有几十个参数,全背是邪路,"知道有、会查文档"(U1.2 三问的功夫)才是正路。

提示

顺手认个亲戚:pd.read_excel("表.xlsx") 直接读 Excel 文件(本地环境装 openpyxl 后可用),df.to_csv("out.csv", index=False) 把处理结果写回 CSV(index=False 别把行号也写进去)。进货出货,一进一出。

✍️ 练习

练习 1:体检报告

对下面的员工表跑完三板斧,然后口头回答(答案里对照):几行几列?哪几列是数值?salary 的平均值大概多少?

Python
✅ 参考答案
import pandas as pd

df = pd.read_csv("staff.csv")
print(df.head())
df.info()
print(df.describe())

读报告:5 行 4 列;salary 和 age 是 int64 数值列;describe 里 salary 的 mean ≈ 10860。三板斧的价值就是 30 秒答出这些问题。

练习 2:直接开算

不转任何类型,给订单表加 total 列(price × qty),打印总营业额和最贵一单的金额。

Python
✅ 参考答案
import pandas as pd

df = pd.read_csv("orders2.csv")
df["total"] = df["price"] * df["qty"]
print(f'总营业额 {df["total"].sum()} 元,最大单 {df["total"].max()} 元')

read_csv 自动转好了类型,整列运算直接上——对比 U1.3 手工版,体会一下工业化。

练习 3:发现异常(挑战)

这份数据埋了两处不对劲。只用三板斧(不许逐行肉眼数)把它们找出来,说明是从哪个输出的哪个指标看出来的。

Python
✅ 参考答案
import pandas as pd

df = pd.read_csv("exam.csv")
df.info()               # 线索一:score 和 attempts 都只有 5 个非空(共 6 行)→ 各有一个缺失
print(df.describe())    # 线索二:score 的 min 是 -15 → 分数不可能为负,离谱值

info 抓缺失、describe 的 min/max 抓离谱——两板斧配合就是最快的异常探测器。这两类问题怎么修,正是两课后"清洗数据"的主题。

📝 随堂测验

随堂测验0 / 5 题正确

1. 拿到一份陌生 CSV,读入后的第一个动作是?

2. df.info() 的输出重点看哪两样?

3. describe() 输出里最容易一眼揪出“离谱值”的是?

4. read_csv 相比 U1.3 的 csv 模块,悄悄帮你做了什么?

5. 读一个 2GB 的大 CSV 之前想先踩踩点,用什么?

本课小结

  • pd.read_csv("文件") 一行进货,自动推断类型(U1.3 的字符串之坑被工业化抹平,但 info 复查不可省)
  • 体检三板斧:head 看长相、info 看体质(Dtype + 缺失)、describe 看指标(min/max 抓离谱)
  • 排障:乱码调 encoding、大文件 nrows 踩点;出货用 to_csv(..., index=False)
  • 参数不背全,"知道有、会查"是正路

下一课学在表里"指哪打哪":选行、选列、按条件筛——数据分析一半的日常动作。

划选正文任意文字可高亮、批注或加入复习卡

讨论

载入中…