夜雨聆风学习资料网

ARTICLE · 1349394

Pandas:程序里的Excel,数据分析之王

Pandas:程序里的Excel,数据分析之王

🐼 Pandas:程序里的Excel,数据分析之王

《Python程序设计》系列文章 · 第13篇 几千行的罐区数据表,几行代码搞定筛选、排序、统计——认识Pandas!


📖 场景引入

小李收到了一份真实的罐区数据表 tank_data.csv(Excel打开长这样):

罐号      月份   输量   液位   温度
TK-101    1      520    8.2    24.5
TK-101    2      480    8.9    22.1
TK-102    1      610    13.6   23.0
...(共36行,3座罐×12个月)

"用列表套列表处理?"小李嘀咕着写了两行,感觉不对劲——列太多、行太多,写起来太绕。

师兄:"该请出Pandas了——程序里的Excel,而且是加强版。"


🐼 装库与两种数据结构

pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

Pandas里两个核心概念:

结构
类比Excel
说明
Series
一列
一列带标签的数据
DataFrame
一张工作表
行索引+列名+数据,二维表

今天的主角就是 DataFrame。


📂 第一步:读取数据,先"看一眼"

import pandas as pd

df = pd.read_csv("tank_data.csv")    # 读CSV(Excel用read_excel)
print(df.head())       # 看前5行
print(df.shape)        # 看几行几列
print(df.info())       # 看列名、类型、缺失情况

运行结果:

      罐号  月份   输量   液位   温度
0  TK-101    1  520.0   8.2  24.5
1  TK-101    2  480.0   8.9  22.1
2  TK-101    3  510.0   9.4  26.3
3  TK-101    4  495.0   8.7  27.0
4  TK-101    5  530.0   9.1  25.8
(37, 5)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 37 entries, 0 to 36
Data columns (total 5 columns): ...

⚠️ 注意:shape显示37行——数据里故意混了一行缺失值,后面清洗时处理!

读取三查:head()看长啥样、shape()看多大、info()看健不健康。专业!


🔍 第二步:选列与筛选

print(df["输量"].head())            # 选一列(像Excel点列标)

high = df[df["液位"] > 13]          # 筛选:液位超13m的记录
print("── 超高液位记录 ──")
print(high)

运行结果(节选):

超高液位记录:
       罐号  月份   输量   液位   温度
12  TK-102    1  610.0  13.6  23.0
13  TK-102    2  590.0  14.4  24.0
14  TK-102    3  605.0  15.2  25.0
...(共9条,都是TK-102的)

原理(面试级知识):df["液位"] > 13 先算出一列True/False,df[条件] 把True的行保留下来——所以叫布尔筛选。

多条件组合用 &(且)、|(或),每个条件必须加括号:

df[(df["液位"] > 13) & (df["温度"] > 25)]

📊 第三步:统计与排序

print("全年总量:", df["输量"].sum())
print("平均液位:", df["液位"].mean().round(2))
print("── 输量前三名 ──")
print(df.sort_values("输量", ascending=False).head(3))

运行结果(节选):

全年总量: 18906.0
平均液位: 10.98
── 输量前三名 ──
       罐号  月份   输量   液位   温度
18  TK-102    7  620.0  15.2  23.0
16  TK-102    5  615.0  13.6  27.0
22  TK-102   11  612.0  15.2  27.0

对照Excel记忆:sum()=求和公式、sort_values()=排序按钮、head(3)=取前三——只是快了一万倍!


🏆 杀手锏:groupby分组统计

"每座罐的年输量各是多少?"——手写循环十几行,Pandas一行:

stat = df.groupby("罐号")["输量"].sum()
print(stat)
print(f"平均液位:{df['液位'].mean():.2f} m")
print("液位异常记录数:", len(df[df["液位"] > 13]))

运行结果:

罐号
TK-101    6100.0
TK-102    7251.0
TK-103    5555.0
TK-104       0.0
Name: 输量, dtype: float64
平均液位:10.98 m
液位异常记录数: 9

🤔 注意到TK-104是0吗?因为数据里TK-104只有一行"缺失输量"的坏行——这正是下次实训要清洗的对象!

groupby = 分组 + 汇总:按罐号分组,每组内求输量之和。月报、年报的核心就这一招!


⚠️ 新手三大坑

坑
现象
解法
列名不一致
KeyError
print(df.columns)
 核对真实列名
文件不在同目录
FileNotFoundError
把csv复制到程序目录,或写完整路径
多条件忘括号
报错
df[(条件1) & (条件2)]

📖 能源故事·课外阅读

会"读数据"的新储运人

某LNG接收站招聘实习生的面试题不是背规程,而是给一份真实的温度-密度数据表,让应聘者说说"能从里面看出什么"。会Python的同学现场跑了几行代码,指出"某罐温差与密度的相关性异常,建议校验仪表",当场获得好评。

行业在变:从"凭经验"到"看数据",从"手工报表"到"自动分析"。数据不会说谎,但只有会分析的人才能让它开口。你正在学的Pandas,就是让数据开口的第一把钥匙。

💭 想一想:将来面试时,你打算展示你的哪个数据分析作品?


🏋️ 动手练习

练习1:读取tank_data.csv,输出行数、列数和前5行。

练习2:筛选液位>13m的记录,数一数有几条。

练习3:输出输量的总和、均值、最高纪录那一行(提示:sort_values后取head(1))。

课后作业6:Pandas数据统计练习。下次实训:数据分析四步法,为期末项目彩排!


📝 课后小测

  1. ounter(item
    DataFrame相当于Excel里的什么?
  2. ounter(item
    筛选液位>13的写法?
  3. ounter(item
    按罐号分组统计输量?

(答案:一张工作表;df[df["液位"]>13];df.groupby("罐号")["输量"].sum())

📣 下期预告

实训课!读取→清洗→统计→可视化→结论四步法全流程实战——为期末大项目彩排,别缺席!


💬 本文是《Python程序设计》系列第13篇,配套教材第13章。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料