A Session is the primary data container in tif1, representing a single F1 session (Practice, Qualifying, Race, or Sprint). It provides lazy-loaded access to lap times, telemetry, driver information, weather data, and race control messages.
class Session: """ Represents an F1 session with lap and telemetry data. Args: year: Season year (2018-current) gp: Grand Prix name or round number session: Session name enable_cache: Enable caching (default: True) lib: Data library ('pandas' or 'polars') Attributes: year: Season year gp: Grand Prix name (URL encoded) session: Session name (URL encoded) drivers_df: DataFrame with driver information laps: DataFrame with all laps """
You can explicitly control what data gets loaded using session.load():
session = tif1.get_session(2024, "Monaco", "Race")# Load all data (default)session.load()# Load only specific datasession.load( laps=True, # Load lap times telemetry=True, # Load all telemetry (requires laps) weather=True, # Load weather data messages=True # Load race control messages)# Load laps and telemetry onlysession.load(laps=True, telemetry=True, weather=False, messages=False)
When telemetry=True, laps are automatically loaded (telemetry requires lap data).
session = tif1.get_session(2024, "Monaco", "Race")# Get overall fastest lapfastest = session.get_fastest_laps(by_driver=False)print(fastest[['Driver', 'LapNumber', 'LapTime']])# Get fastest lap for each driverfastest_per_driver = session.get_fastest_laps(by_driver=True)print(fastest_per_driver[['Driver', 'LapNumber', 'LapTime']])# Get fastest laps for specific driversfastest_top3 = session.get_fastest_laps( by_driver=True, drivers=['VER', 'HAM', 'LEC'])
# Use pandas (default)session = tif1.get_session(2024, "Monaco", "Race", lib="pandas")# Use polars (faster for large datasets)session = tif1.get_session(2024, "Monaco", "Race", lib="polars")
Polars can be 2x faster for large datasets but requires the polars package:
session = tif1.get_session(2024, "Monaco", "Race")# Only laps are loaded - weather and messages remain unloadedlaps = session.laps# Now weather is loaded (on demand)weather = session.weather
quali = tif1.get_session(2024, "Monaco", "Qualifying")# Get fastest laps per driverfastest = quali.get_fastest_laps(by_driver=True)# Sort by lap timefastest_sorted = fastest.sort_values('LapTime')print(fastest_sorted[['Driver', 'LapTime', 'Compound']])