Skip to content

Python Pandas: How to Add or Rename Column Names in Pandas

Learn how to set, rename, or modify column names in Pandas DataFrames using methods like columns=[], rename(), add_prefix(), and add_suffix() for cleaner data handling.

Setting descriptive column headers is essential for readable, maintainable DataFrames. Pandas provides several methods to define or modify column names at different stages of your workflow.

During DataFrame Creation - Best Practice

Specify columns when creating the DataFrame:

import pandas as pd

data = [['Alice', 25], ['Bob', 30]]
df = pd.DataFrame(data, columns=['Name', 'Age'])

print(df)

Output:

    Name  Age
0  Alice   25
1    Bob   30

From Different Data Sources

import pandas as pd

df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})

import numpy as np
arr = np.array([[1, 2], [3, 4]])
df = pd.DataFrame(arr, columns=['X', 'Y'])

df = pd.read_csv('data.csv', names=['Col1', 'Col2'], header=0)

Overwrite All Column Names

Replace all columns at once by assigning a list:

import pandas as pd

df = pd.DataFrame([[1, 2, 3], [4, 5, 6]])
print(f"Before: {list(df.columns)}")

df.columns = ['A', 'B', 'C']
print(f"After: {list(df.columns)}")

Output:

Before: [0, 1, 2]
After: ['A', 'B', 'C']

Rename Specific Columns

Use rename() with a dictionary to change selected columns:

import pandas as pd

df = pd.DataFrame({'A': [1, 2], 'B': [3, 4], 'C': [5, 6]})

df = df.rename(columns={'A': 'Alpha', 'B': 'Beta'})

print(df.columns.tolist())

Output:

['Alpha', 'Beta', 'C']

In-Place Renaming

import pandas as pd

df = pd.DataFrame({'old_name': [1, 2]})

df.rename(columns={'old_name': 'new_name'}, inplace=True)

print(df)

Output:

   new_name
0         1
1         2

Add Prefix or Suffix

Bulk-modify all column names:

import pandas as pd

df = pd.DataFrame({'A': [1], 'B': [2], 'C': [3]})

df_prefixed = df.add_prefix('data_')
print(df_prefixed.columns.tolist())

df_suffixed = df.add_suffix('_v1')
print(df_suffixed.columns.tolist())

Output:

['data_A', 'data_B', 'data_C']
['A_v1', 'B_v1', 'C_v1']

Practical Use Case

import pandas as pd

sales_2023 = pd.DataFrame({'Revenue': [100], 'Profit': [20]})
sales_2024 = pd.DataFrame({'Revenue': [150], 'Profit': [35]})

combined = sales_2023.add_suffix('_2023').join(
    sales_2024.add_suffix('_2024')
)
print(combined.columns.tolist())

Output:

['Revenue_2023', 'Profit_2023', 'Revenue_2024', 'Profit_2024']

Transform Column Names

Apply functions to modify names:

import pandas as pd

df = pd.DataFrame({'First Name': [1], 'Last Name': [2], 'EMAIL': [3]})

df.columns = df.columns.str.lower()
print(df.columns.tolist())

df.columns = df.columns.str.replace(' ', '_')
print(df.columns.tolist())

Output:

['first name', 'last name', 'email']
['first_name', 'last_name', 'email']

Using rename with a Function

import pandas as pd

df = pd.DataFrame({'col A': [1], 'col B': [2]})

df = df.rename(columns=lambda x: x.upper().replace(' ', '_'))
print(df.columns.tolist())

Output:

['COL_A', 'COL_B']

Quick Reference

Scenario Method
New DataFrame pd.DataFrame(data, columns=[...])
Replace all names df.columns = ['A', 'B', 'C']
Rename specific df.rename(columns={'old': 'new'})
Add prefix df.add_prefix('pre_')
Add suffix df.add_suffix('_suf')
Transform names df.columns = df.columns.str.lower()

Summary

Set column names at DataFrame creation whenever possible-it's the cleanest approach.

  • Use df.columns = [...] to replace all names at once, or df.rename(columns={...}) for targeted changes.
  • For bulk modifications, add_prefix() and add_suffix() provide convenient shortcuts.
Navigation