How to Read CSV with Headers Using Pandas?

Pandas reads the first CSV row as column names by default. Use pd.read_csv with header=0 when you want to state that choice explicitly, or header=None when the first row is data.

The default header behavior keeps named-column selection straightforward.

Read a CSV file with its header row

Create a small CSV file and pass its path to pd.read_csv. The returned DataFrame uses the first row for column labels, so you can select fields by name.

from io import StringIO
import pandas as pd

csv_text = "name,score\nAda,94\nLinus,88\n"
df = pd.read_csv(StringIO(csv_text))
print(df.columns.tolist())
print(df["score"].tolist())

I checked this against the current pandas documentation. The output is a list of column names followed by the two score values, which confirms that the first row became the header.

['name', 'score']
[94, 88]

When the file has no header

Set header=None when every row contains data. Pandas then assigns integer column labels. Supply names if you already know the fields.

csv_text = "Ada,94\nLinus,88\n"
df = pd.read_csv(StringIO(csv_text), header=None, names=["name", "score"])
print(df.to_dict(orient="records"))
[{'name': 'Ada', 'score': 94}, {'name': 'Linus', 'score': 88}]

Skip notes before the header

If a file starts with metadata rows, use skiprows so the first remaining row becomes the header. Count from zero in a list of row indexes when you need to skip selected lines.

csv_text = "exported: 2026\nsource: lab\nname,score\nAda,94\n"
df = pd.read_csv(StringIO(csv_text), skiprows=2)
print(df.columns.tolist())
['name', 'score']

Fix whitespace in column names

Headers copied from spreadsheets can contain extra spaces. Strip the labels after reading so a selection such as df[“score”] does not fail because the stored name is ” score “.

csv_text = " name , score \nAda,94\n"
df = pd.read_csv(StringIO(csv_text))
df.columns = df.columns.str.strip()
print(df.columns.tolist())
['name', 'score']

Useful header options

  • Use sep for tab or pipe-delimited files.
  • Use encoding when the source file is not UTF-8.
  • Use usecols to load only named fields.
  • Use dtype when you need predictable column types.

Reference

pandas.read_csv documentation

Ninad
Ninad

A Python and PHP developer turned writer out of passion. Over the last 6+ years, he has written for brands including DigitalOcean, DreamHost, Hostinger, and many others. When not working, you'll find him tinkering with open-source projects, vibe coding, or on a mountain trail, completely disconnected from tech.

Articles: 136