Skip to main content
The drivers.csv table contains biographical information about all Formula 1 drivers who have participated in the championship.

Schema

FieldTypeDescription
driverIdintegerUnique identifier for each driver
driverRefstringShort reference name for the driver (URL-friendly)
numberintegerPermanent race number (introduced in 2014)
codestringThree-letter driver code (e.g., HAM, VER, LEC)
forenamestringDriver’s first name
surnamestringDriver’s last name
dobdateDriver’s date of birth (YYYY-MM-DD format)
nationalitystringDriver’s nationality
urlstringWikipedia URL for the driver
The number and code fields contain \N for drivers who raced before these systems were introduced. Permanent numbers were introduced in 2014, and three-letter codes in 1996.

Sample Data

driverIddriverRefnumbercodeforenamesurnamedobnationality
1hamilton44HAMLewisHamilton1985-01-07British
2heidfeld\NHEINickHeidfeld1977-05-10German
3rosberg6ROSNicoRosberg1985-06-27German
4alonso14ALOFernandoAlonso1981-07-29Spanish

Relationships

Referenced by:
  • results.driverIddrivers.driverId
  • qualifying.driverIddrivers.driverId
  • sprint_results.driverIddrivers.driverId
  • driver_standings.driverIddrivers.driverId
  • lap_times.driverIddrivers.driverId
  • pit_stops.driverIddrivers.driverId

Dataset Statistics

  • Total Records: 865 drivers
  • Date Range: 1950 - Present
  • Active Drivers: Varies by season

Example Queries

Find drivers by nationality

import pandas as pd

drivers = pd.read_csv('drivers.csv')
british_drivers = drivers[drivers['nationality'] == 'British']
print(british_drivers[['forename', 'surname', 'dob']])

Calculate driver ages

from datetime import datetime

drivers['dob'] = pd.to_datetime(drivers['dob'])
drivers['age'] = (datetime.now() - drivers['dob']).dt.days // 365
print(drivers[['forename', 'surname', 'age']].head())

Find drivers with permanent numbers

modern_drivers = drivers[drivers['number'] != '\\N']
print(modern_drivers[['forename', 'surname', 'number', 'code']])

Search for specific driver

verstappen = drivers[drivers['surname'] == 'Verstappen']
print(verstappen)

Get youngest and oldest drivers

drivers['dob'] = pd.to_datetime(drivers['dob'])
youngest = drivers.nlargest(1, 'dob')
oldest = drivers.nsmallest(1, 'dob')
print(f"Youngest: {youngest['forename'].iloc[0]} {youngest['surname'].iloc[0]}")
print(f"Oldest: {oldest['forename'].iloc[0]} {oldest['surname'].iloc[0]}")

Notes

  • \N in the dataset represents null values (data not available)
  • Permanent driver numbers (e.g., 44 for Hamilton) were introduced in 2014
  • Three-letter codes were introduced in 1996
  • Some drivers have competed under different nationalities during their career
  • Date of birth is crucial for age-related statistics and historical analysis

Build docs developers (and LLMs) love