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 30From 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 2Add 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, ordf.rename(columns={...})for targeted changes. - For bulk modifications,
add_prefix()andadd_suffix()provide convenient shortcuts.