「AI Python 系列」第 02 栏 · AI+数据可视化 全栏 15 篇 · 零成本跟完 🍃 作者:梅雅达编程笔记 首发:CSDN
摘要: 画图的原料是数据,而现实中的数据从来不会整整齐齐等你来画。本篇用一份电商销售数据,手把手带你用 pandas 完成数据读取(CSV/Excel)、字段筛选、条件过滤、分组统计、数据排序和数据变形。每个操作都有真实代码和运行结果。掌握这些,80% 的可视化前准备工作就解决了。
数据可视化的流程是:拿到数据 → 处理数据 → 画图。
前两步占了 80% 的工作量。这篇专门解决"处理数据"这一步。
用的工具是 pandas——Python 数据分析的绝对核心。不管你后面画什么图,pandas 都是绕不开的。
一、先造一份数据
为了后面讲得清楚,我们先造一份电商销售数据:
import pandas as pd
import numpy as np
# 造一份模拟数据
data = {
'日期': ['2025-01-01', '2025-01-01', '2025-01-02', '2025-01-02',
'2025-01-03', '2025-01-03', '2025-01-04', '2025-01-04',
'2025-01-05', '2025-01-05', '2025-01-06', '2025-01-06'],
'商品': ['A', 'B', 'A', 'B', 'A', 'C', 'A', 'B', 'C', 'A', 'B', 'C'],
'销量': [15, 23, 18, 25, 12, 30, 20, 28, 35, 22, 19, 40],
'单价': [99, 199, 99, 199, 99, 59, 99, 199, 59, 99, 199, 59],
'渠道': ['线上', '线下', '线上', '线上', '线下', '线上',
'线上', '线下', '线上', '线下', '线上', '线下']
}
df = pd.DataFrame(data)
print(df)
输出:
日期 商品 销量 单价 渠道
0 2025-01-01 A 15 99 线上
1 2025-01-01 B 23 199 线下
2 2025-01-02 A 18 99 线上
3 2025-01-02 B 25 199 线上
4 2025-01-03 A 12 99 线下
5 2025-01-03 C 30 59 线上
6 2025-01-04 A 20 99 线上
7 2025-01-04 B 28 199 线下
8 2025-01-05 C 35 59 线上
9 2025-01-05 A 22 99 线下
10 2025-01-06 B 19 199 线上
11 2025-01-06 C 40 59 线下

好,数据有了。接下来一个一个操作。
二、读取数据
现实中的数据通常在文件里。最常见的两种:CSV 和 Excel。
读 CSV:
df = pd.read_csv('sales_data.csv')
读 Excel:
df = pd.read_excel('sales_data.xlsx')
就这么简单。pandas 会自动把每一行变成 DataFrame 的一行,列名用文件的第一行。
如果你想读我们刚才造的数据并保存成文件:
df.to_csv('sales_data.csv', index=False, encoding='utf-8-sig')
df.to_excel('sales_data.xlsx', index=False)
⚠️ CSV 保存时推荐用 utf-8-sig 编码,这样用 Excel 打开不会出现中文乱码。

三、基本查看
拿到数据第一件事:先看看它长什么样。
# 看前 5 行
print(df.head())

# 看后 3 行
print(df.tail(3))

# 看基本信息:多少行、多少列、每列的数据类型
print(df.info())

# 看统计摘要:数值列的均值、最大最小值
print(df.describe())

# 看有多少行、多少列
print(df.shape) # (12, 5)

describe() 特别有用。它会一次性告诉你每列数值的均值、标准差、最小值、25%分位、中位数、75%分位、最大值。扫一眼就能发现数据有没有异常。
四、选列:只要我关心的
一份数据可能有 20 列,但你画图时可能只需要 3 列。
# 选单列
print(df['商品'])

# 选多列
print(df[['日期', '商品', '销量']])

# 只取销量和单价两列,计算销售额
df['销售额'] = df['销量'] * df['单价']
print(df)

最后一行直接新增了一列"销售额"。pandas 里新增列就这么简单,等号左边写列名,右边写计算逻辑。
五、筛选:只要符合条件的行
按条件筛选:
# 只看商品 A 的数据
df_a = df[df['商品'] == 'A']
print(df_a)

# 只看销量大于 20 的
df_high = df[df['销量'] > 20]
print(df_high)

# 组合条件:商品 A 且线上渠道
df_a_online = df[(df['商品'] == 'A') & (df['渠道'] == '线上')]
print(df_a_online)

用 query() 方法,语法更直观:
df_a_online = df.query("商品 == 'A' and 渠道 == '线上'")
print(df_a_online)

两种写法效果一样,query() 读起来更像自然语言,数据量大的时候也更快一点。
六、排序
# 按销量从高到低排
df_sorted = df.sort_values('销量', ascending=False)
print(df_sorted)

# 先按商品排序,再按销量从高到低
df_sorted = df.sort_values(['商品', '销量'], ascending=[True, False])
print(df_sorted)

排序之后画图,柱状图就是从高到低排列的,比默认的乱序好看很多。
七、分组统计
这是数据分析里最常用的操作,没有之一。
按商品分组,看总销量:
print(df.groupby('商品')['销量'].sum())
输出:
商品
A 87
B 95
C 105

按商品分组,看总销售额:
print(df.groupby('商品')['销售额'].sum())

多维度分组:
# 按商品和渠道分组
result = df.groupby(['商品', '渠道'])['销量'].sum().reset_index()
print(result)
输出:
商品 渠道 销量
0 A 线上 53
1 A 线下 34
2 B 线上 44
3 B 线下 51
4 C 线上 65
5 C 线下 40

reset_index() 的作用是把分组后的结果变回普通的 DataFrame,方便后续操作或画图。
多个统计指标一起来:
summary = df.groupby('商品').agg(
总销量=('销量', 'sum'),
平均销量=('销量', 'mean'),
总销售额=('销售额', 'sum'),
记录数=('销量', 'count')
).reset_index()
print(summary)

agg() 可以同时对一列做多种计算,非常灵活。
八、日期处理
可视化里经常要按日期分组(按天、按周、按月),所以日期处理是基本功。
# 把日期字符串转成 datetime 类型
df['日期'] = pd.to_datetime(df['日期'])
# 提取年、月、日、星期
df['年'] = df['日期'].dt.year
df['月'] = df['日期'].dt.month
df['日'] = df['日期'].dt.day
df['星期'] = df['日期'].dt.day_name()
print(df[['日期', '年', '月', '日', '星期']])

按周汇总:
df.set_index('日期', inplace=True)
weekly = df.resample('W')['销量'].sum()
print(weekly)

resample() 是时间序列的神器,'W' 表示按周,'M' 按月,'D' 按天。
九、数据变形:透视表
透视表是 Excel 里最常用的功能之一,pandas 也有。
# 行是商品,列是渠道,值是总销量
pivot = pd.pivot_table(df, values='销量', index='商品', columns='渠道', aggfunc='sum')
print(pivot)
输出:
渠道 线上 线下
商品
A 53 34
B 44 51
C 65 40

一行代码,把长表变成了宽表。这种格式非常适合画分组柱状图。
十、小结
这篇覆盖了 pandas 最核心的操作:
| 读文件 | pd.read_csv() / pd.read_excel() |
| 选列 | df[['列A', '列B']] |
| 筛选 | df[df['列'] > 条件] 或 df.query() |
| 排序 | df.sort_values() |
| 分组 | df.groupby().agg() |
| 日期处理 | pd.to_datetime() + .dt 访问器 |
| 透视表 | pd.pivot_table() |
这些操作组合起来,能处理绝大多数数据可视化的前置工作。
下一篇讲数据清洗——缺失值、异常值、重复值。现实中的数据比这份"干净"的模拟数据脏得多,那才是真正头疼的地方。
下期预告: Day 04 数据清洗——缺失值、异常值、重复值一站式处理。现实中的数据不会乖乖等你画图,先把它洗干净。
往期回顾
Day 01 · 数据可视化到底在干啥?为什么 AI 让它变简单了
Day 02:环境搭建 Python 数据分析零成本工具包
专栏推荐
- 「AI Python 系列」第 02 栏 · AI 数据可视化(连载中)
- 「AI Python 系列」第 01 栏 · AI+自动化办公(连载中)
- 「AI Python 系列」第 03 栏 · Python 爬虫实战(连载中)
资源领取
- 关注作者获取本栏完整代码和数据集
原创声明:本文为梅雅达编程笔记原创作品,未经允许不得转载。






