news 2026/9/18 15:25:23

FastF1 v3.6.x 版本更新全解析:成绩数据增强、赛历剩余事件计算修正与绘图 API 清理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FastF1 v3.6.x 版本更新全解析:成绩数据增强、赛历剩余事件计算修正与绘图 API 清理

FastF1 v3.6.x 版本更新全解析:成绩数据增强、赛历剩余事件计算修正与绘图 API 清理

【免费下载链接】Fast-F1FastF1 is a python package for accessing and analyzing Formula 1 results, schedules, timing data and telemetry项目地址: https://gitcode.com/GitHub_Trending/fa/Fast-F1

v3.6.0 与 v3.6.1 是 FastF1 在 2025 赛季中期的两个连续维护版本,围绕 F1 数据分析的实战痛点展开:为SessionResults新增每名车手的完赛圈数(Laps列)、修正get_events_remaining对"剩余赛事"的时间判定逻辑、在官方成绩缺失时改用实时计时数据推算初步成绩,同时按弃用时间线移除了fastf1.plotting中的一批旧常量与旧函数。阅读本文后,你将掌握这些新特性的 API 用法、底层实现原理,以及从旧绘图 API 迁移到新接口的具体步骤。

版本发布概况

v3.6.x 系列包含两个补丁级别的小版本:

版本发布日期定位
v3.6.12025-09-05Bug 修复版本,仅含 1 项绘图常量修复
v3.6.02025-07-08功能版本,含新特性、Bug 修复、弃用清理与维护工作

两个版本均处于 2025 赛季进行期间,因此多处修复直接针对当年赛事(英国大奖赛、巴林大奖赛、澳大利亚大奖赛、迈阿密冲刺赛、蒙扎 FP1)暴露出的源数据问题。

新特性一:SessionResults新增Laps

v3.6.0 起,正赛(Race)或冲刺赛(Sprint)结束后,每名车手完成的圈数可以通过Session.results直接获取,无需再自行对Session.laps做分组统计。

使用方式

import fastf1 session = fastf1.get_session(2025, "Monza", "R") session.load() # 查看所有车手的完赛圈数 print(session.results[["Abbreviation", "Laps"]])

该列以float64类型存在于SessionResults数据框中,且只在会话类型为RaceSprint时才填充数值,其余会话类型下保持空值。

源码实现

从 fastf1/core.py 中的SessionResults._COLUMNS定义可以看到,"Laps": "float64"已作为默认列写入类常量表。SessionResults本身是pandas.DataFrame的子类(定义于 fastf1/core.py),因此该列同样支持 pandas 的全部索引、筛选与聚合操作。值得注意的一点是:SessionResults的所有默认列总是存在,即使对当前会话不相关也不例外(源码 docstring 中对此有明确说明),因此判断某场测试赛是否包含Laps数据时,应同时检查会话类型而非仅检查列是否存在。

新特性二:get_events_remaining的时间判定逻辑修正

此前get_events_remaining在判断"哪些赛事还剩下"时存在边界缺陷:它基于赛事日期而非精确的本地起跑时间,导致在比赛周末当天调用时结果可能不准确。v3.6.0(PR #750,贡献者 @VLADOZXD)修复了这一问题,现在该函数会结合当前时刻的具体时间每场赛事最后一个会话的开始时间来精确判定。

使用方式

import fastf1 # 返回当前赛季剩余的全部赛事(含测试) remaining = fastf1.get_events_remaining() # 排除测试赛,只看比赛周末 races = fastf1.get_events_remaining(include_testing=False) # 也可以指定一个任意时间点,获取该时间之后的所有赛事 from datetime import datetime after_aug = fastf1.get_events_remaining(datetime(2025, 8, 1))

底层判定逻辑

从 fastf1/events.py 的源码实现看:

  • 未显式传入dt时,默认取当前 UTC 时间并去除时区信息(datetime.now(timezone.utc).replace(tzinfo=None));
  • 非测试赛事,取Session5DateUtc(即最后一个会话,通常是正赛)的 UTC 时间作为比较基准;
  • 测试赛事event.is_testing()为真),则取Session3DateUtc作为基准;
  • 只有会话时间严格晚于dt的赛事才会被保留,时间早于或等于dt的赛事会被从EventSchedule中剔除。

由于赛事排期通过get_event_schedule加载(默认优先使用 FastF1 自有后端,2018 年以前的赛季自动回退到 Ergast),get_events_remaining同样支持include_testingbackend两个关键字参数,语义与get_event_schedule完全一致。

新特性三:官方成绩缺失时从计时数据推算初步成绩

在极少数情况下,Jolpica-F1 等官方成绩数据源可能尚未返回或缺失某场比赛的正式结果(例如赛事刚结束、数据仍在整理中)。v3.6.0(PR #737,贡献者 @Casper-Guo)为此增加了兜底路径:当没有任何官方成绩数据可用时,FastF1 会根据实时计时数据(timing data)计算初步的(preliminary)正赛与冲刺赛成绩,使Session.results在赛后第一时间即可读取,而无需等待官方数据就绪。

需要说明的是,这是数据缺失时的降级方案:只要官方数据源可用,仍以官方成绩为准(包括赛后罚时、取消资格等处理)。从设计定位看,它主要服务于赛后即时分析场景,例如比赛刚结束就立即拉取成绩做快速可视化。

Bug 修复详解

第一圈结束时的位置计算(2025 英国大奖赛)

修复了在 2025 年英国大奖赛中,所有车手在第一圈结束时的位置被错误计算的问题(#765)。该问题源自计时数据在第一圈的特殊处理逻辑,修复后位置序列与官方计圈数据保持一致。

轮胎信息源数据纠错(2025 澳大利亚大奖赛与迈阿密冲刺赛)

为 2025 年澳大利亚大奖赛正赛与 2025 年迈阿密大奖赛冲刺赛增加了额外的检测与纠错逻辑(#746),用于修正源数据中错误的轮胎(tyre/compound)信息。这意味着当源数据中的 compound 字段与实际进站/换胎记录矛盾时,解析层会进行校正。

缺失圈速的推算(2025 巴林大奖赛)

API 解析器现在会在源数据明确以空圈速对象(empty lap time object)标记缺失圈速的情况下,尝试用已有的分段计时(sector times)推算缺失的整圈圈速(#740)。该修复针对 2025 年巴林大奖赛中 RUS 赛车因转发器(transponder)故障导致的圈速数据空洞,保证圈速序列的完整性,避免下游分析(如最快圈、圈速分布图)因缺失值出错。

绘图车队名称匹配增强:支持短名称

绘图功能中的车队名称匹配此前只考虑标准化后的全名,导致短名称"RB F1 Team"这类车队无法被正确匹配。v3.6.0(#726,贡献者 @Casper-Guo)让匹配逻辑额外考虑车队短名称(short name)

从 fastf1/plotting/_interface.py 的_get_team_fuzzy实现可以看到完整的匹配阶梯:先做字符串规范化并剔除 "racing"、"team"、"f1"、"scuderia" 等常见非区分词,然后依次尝试精确归一化名匹配、与全名/短名的完整匹配(identifier == team.name.casefold()identifier == team.short_name.casefold())、归一化名的子串匹配,最后才降级到模糊字符串匹配(fuzzy_matcher,绝对置信度 0.35、相对置信度 0.30,不命中时会打印纠错警告)。

车队短名称的数据来源是绘图常量表 fastf1/plotting/constants.json,其中 2024 与 2025 赛季的车队条目里,红牛二队更名后的车队短名即为"RB"。对于常量表中未收录的新车队,fastf1/plotting/_backend.py 的_generate_team会从官方车队名中自动推导短名(依次去除 "Team"、"F1"、"Scuderia"、"Racing" 等词,并保留 "Racing Bulls" 这类特例不变)。

破坏性变更:按弃用时间线移除的绘图 API

按照 v3.4.0 中宣布的弃用时间表,v3.6.0 正式移除了fastf1.plotting中的一批旧接口。如果你仍在用这些 API,升级到 v3.6.0 及以上版本前必须完成迁移。

移除的模块级属性

以下 6 个常量属性已从fastf1.plotting移除,请改用新的绘图接口(如DriverTeamMappingget_team_color等)或直接从常量数据中读取:

  • COMPOUND_COLORS
  • DRIVER_COLORS
  • DRIVER_TRANSLATE
  • TEAM_COLORS
  • TEAM_TRANSLATE
  • COLOR_PALETTE

移除的函数

以下 3 个函数已从fastf1.plotting移除:

  • driver_color()
  • team_color()
  • lapnumber_axis()

setup_mpl参数变化

  • 参数misc_mpl_mods被移除,且没有提供替代方案——它原本承载的"额外 matplotlib 模块导入"能力不再被支持;
  • 参数color_scheme的默认值改为None。这意味着不再隐式套用任何配色方案,颜色将完全由绘图功能内部的配色常量与车队/车手映射决定。

迁移建议

升级到 v3.6.x 后,建议按以下步骤排查:

  1. 全局搜索代码中的COMPOUND_COLORSDRIVER_COLORSTEAM_COLORSCOLOR_PALETTE等标识符,替换为新的面向对象绘图接口;
  2. driver_color()team_color()调用替换为按车手/车队查询颜色的新 API;
  3. 移除setup_mpl(misc_mpl_mods=...)调用,或将其中的 matplotlib 模块导入移到代码顶层显式import
  4. 若依赖旧配色方案,需在setup_mpl中显式传入color_scheme,不要依赖默认行为。

维护与杂项更新

  • pandas 兼容性维护(#727,贡献者 @Casper-Guo):提前适配 pandas 即将到来的行为变化,并修复了因隐式类型强制转换(implicit type coercion)触发的弃用警告。这保证了 FastF1 在较新 pandas 版本下的稳定运行,也降低了未来大版本升级的断裂风险。
  • 示例更新:示例"Who can still win the drivers WDC"(谁还能赢得车手总冠军)已更新为使用 2025 赛季数据(#763);画廊新增"Season Summary Visualization"(赛季总结可视化)示例(#661)。
  • 文档改进:多处以文档层面进行修缮(贡献者 @Casper-Guo)。

这些示例位于 examples/standings,其中新增的赛季总结可视化示例与既有示例一起,展示了如何将 v3.6.x 的成绩与圈速 API 组合成面向整季的分析可视化。

升级到 v3.6.x 的检查清单

综合以上变更,从旧版本升级到 v3.6.0 / v3.6.1 时,重点验证以下场景:

  1. 结果表读取:确认session.results["Laps"]在正赛与冲刺赛后能返回正确圈数;
  2. 赛历剩余赛事:在比赛周末当天调用get_events_remaining(),确认已开始的赛事不再出现在结果中(时间粒度精确到秒);
  3. 官方数据缺失场景:模拟官方成绩未就绪时读取session.results,确认初步成绩能正常生成;
  4. 绘图 API:全面替换已移除的 6 个常量与 3 个函数,并处理setup_mpl的两个参数变更;
  5. 车队匹配:使用"RB""RB F1 Team"等短名称调用绘图功能,确认能正确解析到对应车队配色。

参考资源

  • 本变更日志的完整归档见 docs/changelog,其中 docs/changelog/index.rst 汇总了全部版本条目;
  • 核心数据结构SessionResults的完整列说明与源码位于 fastf1/core.py;
  • 赛历与剩余赛事 API 实现位于 fastf1/events.py;
  • 绘图常量与车队匹配实现位于 fastf1/plotting/constants.json 与 fastf1/plotting/_interface.py;
  • 相关单元测试可参考 fastf1/tests 下的test_events.pytest_core.pytest_plotting.py等文件。

【免费下载链接】Fast-F1FastF1 is a python package for accessing and analyzing Formula 1 results, schedules, timing data and telemetry项目地址: https://gitcode.com/GitHub_Trending/fa/Fast-F1

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 15:24:44

Windows 11源码方式运行Dify:Python 3.11与Node.js 18环境搭建实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 15:24:34

不用Selenium!Python直接调腾讯文档接口批量导出实战

先说结论:如果你有一堆腾讯文档需要定期备份,或者想把在线表格里的数据批量同步到本地做分析,直接在浏览器里点“导出”逐个下载,是最笨的办法。用 Selenium 模拟人去点,短期跑几个还行,一旦文档数量上来了…

作者头像 李华
网站建设 2026/9/18 15:23:28

Django大数据电商销售预测系统:数据链路、模型回测与ECharts大屏

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 15:21:27

在 Cursor 里把模型名改 K3,TaoToken 管住 API Key

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 15:20:54

8D报告体系化管理:PPT驱动的问题闭环引擎

简介:本资源是一份面向制造业质量管理人员、体系工程师及内审员的8D问题解决法系统培训教材,聚焦体系管理中的典型品质异常闭环处置。52页PPT内容结构完整,覆盖8D方法论起源(福特公司标准)、推行必要性、适用场景&…

作者头像 李华
网站建设 2026/9/18 15:20:07

船舶制造数字化技术落地:数据贯通是关键

简介:船舶制造数字化制造技术课件面向船舶类专业师生及行业从业者,系统讲解数字化造船的背景、发展历程与技术方案。内容涵盖中国数字化造船从起步、集成到三维CAD/CAM应用的三个阶段,深入解读全过程仿真化、过程控制并行化、决策体系智能化等…

作者头像 李华