欢迎光临
我们一直在努力

Day 03 · Pandas 快速上手:读取、清洗、整理数据

「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 爬虫实战(连载中)

资源领取

  • 关注作者获取本栏完整代码和数据集

原创声明:本文为梅雅达编程笔记原创作品,未经允许不得转载。

赞(0)
未经允许不得转载:171主机测评 » Day 03 · Pandas 快速上手:读取、清洗、整理数据
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址