Pandas 实战九:时序数据处理,日期筛选/统计分析一看就会
今天,咱们来搞定时序数据的核心操作
接续上篇《Pandas 实战八:电商数据案例分析》,这次我们聚焦数据处理中的另一个重要板块:时序数据。掌握了日期格式转换、按周期筛选、统计与趋势分析这几项技能,你就能轻松应对日常工作中绝大多数与时间相关的分析需求了。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
什么是时序数据?顾名思义,就是那些带有日期或时间戳标识的数据记录。店铺的每日销售额、APP的用户登录日志、气象站的逐小时观测数据、员工的打卡记录,都属于这个范畴。这类数据在日常业务中极为常见,无论是老板要求“统计一下7月份每周的销售额”,还是需要“筛选出3月10日到20日的用户行为数据”,用Pandas来处理,效率通常比Excel高出不止一个量级,即便是新手也能快速上手。

一、先搞懂:时序数据的“基础操作”
处理时序数据,第一步往往不是直接分析,而是要先教会Pandas“认识”日期。道理很简单,我们拿到的原始数据里,日期列常常是字符串格式(比如“2024-07-01”),这种格式无法直接进行基于时间的筛选或计算。所以,首当其冲的任务便是「日期格式转换」。
1. 准备数据+转换日期格式
先模拟一份“店铺7月销售数据”作为示例,下面的代码可以直接复制运行:
import pandas as pd
import matplotlib.pyplot as plt # 后续可视化用
# 模拟数据:日期(字符串格式)、销售额、客流量
data = {
"date": ["2024-07-01", "2024-07-02", "2024-2024-07-03", "2024-07-04",
"2024-07-05", "2024-07-06", "2024-07-07", "2024-07-08",
"2024-07-09", "2024-07-10", "2024-07-11", "2024-07-12",
"2024-07-13", "2024-07-14", "2024-07-15"], # 15天数据
"sales": [5200, 4800, 6100, 5500, 7200, 8300, 6900, 5800,
6500, 7100, 6300, 5900, 7800, 8200, 7500],
"customers": [120, 110, 135, 125, 150, 170, 145, 130,
140, 155, 138, 128, 165, 172, 158]
}
df = pd.DataFrame(data)
print("转换前日期类型:", df["date"].dtype) # 输出:object(字符串类型)
# 关键步骤:将字符串日期转为Pandas可识别的datetime类型
df["date"] = pd.to_datetime(df["date"])
print("转换后日期类型:", df["date"].dtype) # 输出:datetime64[ns](日期类型)
2. 进阶:把日期设为“索引”
有一个好习惯能让后续操作事半功倍:将日期列设置为数据框的索引。这样做之后,基于时间的筛选、切片和重采样都会变得异常简洁直观,强烈建议新手掌握。
df_indexed = df.set_index("date") # 把date列设为索引
print("设为索引后的数据:")
print(df_indexed.head()) # 显示前5行
运行这段代码,你会看到日期列移到了数据最左侧的索引位置,整个数据结构看起来一目了然。
二、核心技能1:按日期筛选
基于时间进行数据筛选,是时序分析中最高频的需求之一。例如,“找出7月5日之后的所有记录”或“筛选出每周一的数据”。下面三个场景覆盖了大部分常见情况,可以直接套用。
场景1:按“具体日期/时间段”筛选
# 1. 筛选单个日期(比如2024-07-08)
df_0708 = df[df["date"] == "2024-07-08"]
print("7月8日数据:")
print(df_0708)
# 2. 筛选时间段(比如7月5日-7月10日)
df_period = df[(df["date"] >= "2024-07-05") & (df["date"] <= "2024-07-10")]
print("\n7月5日-10日数据:")
print(df_period)
# 3. 用索引筛选(更简洁)
df_indexed_period = df_indexed["2024-07-05":"2024-07-10"] # 切片语法,左闭右闭
print("\n索引筛选时间段:")
print(df_indexed_period)
场景2:按“年/月/日”筛选
比如,需要筛选出整个7月份的数据,而不关心具体是哪一年。
# 筛选7月份的数据(不管年份,只看月份)
df_july = df[df["date"].dt.month == 7]
# 筛选所有“周一”的数据(dt.weekday:0=周一,6=周日)
df_monday = df[df["date"].dt.weekday == 0]
print("7月份数据总行数:", len(df_july))
print("周一的数据:")
print(df_monday)
场景3:按“季度/星期”筛选
# 筛选第三季度(7-9月)的数据
df_q3 = df[df["date"].dt.quarter == 3]
# 筛选工作日(周一到周五)的数据
df_workday = df[df["date"].dt.weekday < 5]
print("第三季度数据:")
print(df_q3.head())
三、核心技能2:时序数据统计
业务中常有按周期汇总统计的需求,例如“计算每周销售总额”或“查看每月的平均客流量”。Pandas的 resample() 函数就是为此而生,堪称神器。记住下面几个最常用的聚合周期缩写即可:
- 日:D (Day)
- 周:W (Week)
- 月:M (Month)
- 季度:Q (Quarter)
示例:按周/月统计销售数据
# 先确保日期是索引(否则resample不好用)
df_indexed = df.set_index("date")
# 1. 按周统计:每周销售额总和、客流量总和
weekly_stats = df_indexed.resample("W").sum()
print("每周统计数据:")
print(weekly_stats)
# 2. 按周统计:每周平均销售额、平均客流量
weekly_mean = df_indexed.resample("W").mean()
print("\n每周平均数据:")
print(weekly_mean)
# 3. 按月统计:7月份总销售额、总客流量
monthly_stats = df_indexed.resample("M").sum()
print("\n7月份总数据:")
print(monthly_stats)
运行后,数据会自动按设定的周期分组。例如,输出结果中的“2024-07-07”代表从当周开始到该周日(默认一周的结束)的数据总和,无需手动拆分,非常便捷。
四、实战案例:分析7月销售趋势
掌握了基础操作,我们通过一个完整的实战案例来巩固一下——利用7月的销售数据进行趋势分析,并生成直观的图表。
分析需求:
- 计算每日销售额的5日滚动平均值,以平滑日常波动,观察趋势。
- 统计每周销售额在整月总销售额中的占比。
- 绘制“每日销售额”与“5日滚动平均”的对比折线图。
# 1. 计算5日滚动平均值(窗口大小=5,计算包含当天及前后临近几天的平均值)
df_indexed["sales_roll_5d"] = df_indexed["sales"].rolling(window=5).mean()
print("带滚动平均值的数据:")
print(df_indexed[["sales", "sales_roll_5d"]].head(10))
# 2. 统计每周销售额占比
weekly_sales = df_indexed.resample("W")["sales"].sum()
weekly_ratio = (weekly_sales / weekly_sales.sum() * 100).round(2) # 占比保留2位小数
print("\n每周销售额占比(%):")
print(weekly_ratio)
# 3. 绘制趋势图(直观看到变化)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文显示问题
plt.figure(figsize=(10, 5))
plt.plot(df_indexed.index, df_indexed["sales"], label="每日销售额", marker="o")
plt.plot(df_indexed.index, df_indexed["sales_roll_5d"], label="5日滚动平均", color="red", linewidth=2)
plt.xlabel("日期")
plt.ylabel("销售额(元)")
plt.title("2024年7月店铺销售额趋势")
plt.legend()
plt.grid(alpha=0.3) # 加网格,更易读
plt.show()
代码执行后,会弹出一张清晰的折线图。图中既能观察到每日销售额的具体波动,又能通过红色的滚动平均线排除偶然因素,把握住销售额的整体走向。这才是趋势分析的关键所在。
五、新手避坑指南
最后,分享几个新手常遇到的问题,提前了解可以避免走弯路。
1. 日期格式不统一
原始数据中可能存在混合格式,如“2024-07-01”和“2024/07/01”。这时使用 pd.to_datetime() 时可以加上 errors="coerce" 参数,无法转换的条目会变成NaT(缺失时间),从而避免程序报错中断。
df["date"] = pd.to_datetime(df["date"], errors="coerce")
2. 筛选时“左闭右开”?
需要留意不同操作下的区间定义。使用索引切片如 df_indexed["2024-07-01":"2024-07-05"] 是“左闭右闭”的,即包含7月5日。而 resample("W") 默认以周日作为一周的结束点。进行关键分析时,最好确认一下周期范围是否符合业务定义。
3. 缺失日期补全
如果数据在某个日期有缺失(比如7月6日没有记录),为了保持时间序列的连续性进行分析,可以先补全日期序列,再用0或其他方法填充缺失值。
df_complete = df_indexed.resample("D").asfreq().fillna(0)
六、总结
综上所述,我们今天系统地梳理了时序数据处理的核心链条:从让Pandas识别日期的格式转换开始,到灵活进行按日期、周期的数据筛选,再到利用重采样进行周期统计,最后通过滚动计算与可视化完成基础的趋势分析。这套组合拳足以覆盖日常数据分析中大部分涉及时序的场景。
时序分析是数据挖掘中的重要基石,无论是未来的库存预测、用户活跃度分析,还是更深层次的时间序列预测模型,都离不开今天所学的这些基础技能。扎实掌握它们,你的数据分析工具箱将更加完备。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
蔚来ET5:30万级智能电动轿跑,设计、性能与科技全面进阶
蔚来ET5:30万级智能轿跑的“六边形战士” 在30万元这个竞争白热化的智能电动轿车市场,一款车要想站稳脚跟,必须是个“全能选手”。蔚来ET5,正是这样一款产品。它以卓越的性能、出众的设计和前沿的科技作为核心武器,精准地切入市场,试图重新定义这个级别的价值标杆。 市场定位与外观设计:一眼可辨的先锋姿
苹果正测试四款非AR智能眼镜,含“库克同款”,定位iPhone超级配件
苹果智能眼镜新动向:四款镜框设计曝光,瞄准后发制人 彭博社的科技记者马克·古尔曼最近带来一则消息,透露苹果正在为其智能眼镜项目评估至少四款不同的镜框设计。面对雷朋与Meta合作的智能眼镜已经抢占的先机,苹果显然打算拿出自己的看家本领——顶级的工业设计和强大的生态整合能力,来一场漂亮的“后发制人”。
金山办公 2026 年(一季报)业绩预告 营收 15.65亿元到16.62亿元、同比增长20.24%到27.68%,净利润 20.22亿元到23.07亿元
金山办公2026年Q1业绩预告解读:营收稳健增长,净利润同比激增超4倍 4月14日,金山办公正式发布了2026年第一季度业绩预告。公告显示,公司在本季度展现出强劲的经营韧性,核心财务指标预计均实现大幅跃升,尤其是盈利能力呈现爆发式增长。 具体财务预测如下:公司预计第一季度营业总收入将达到15 65亿
长城魏牌 V9X 标轴版车型官图公布,4 月 16 日开启预售
长城魏牌 V9X 标轴版官图发布,4月16日开启预售 4月10日,长城汽车旗下魏牌正式揭晓了V9X标轴版车型的官方图片。这款备受关注的新车轴距设定为3050mm,并已确定将于4月16日启动预售。 先看外观,标轴版车型完整延续了品牌标志性的“东方经典建筑美学”设计语言。车头部分,发光悬浮车标的设计颇为
保时捷 2026 年一季度全球交付量同比下滑 15%,中国市场暴跌 21%
保时捷2026年开局遇冷:转型阵痛与市场寒流 2026年的春天,对于跑车巨头保时捷而言,似乎有些寒意。最新数据显示,这家以性能著称的制造商在第一季度全球仅交付了60,991台新车,与去年同期相比,下滑幅度达到了15%。 这盆冷水,主要浇在了两个关键市场:中国和北美。尤其是其电动化板块,未能扛起增长大
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

