#Rename pandas DataFrame columns with method chaining
When I need to apply successive steps of data transformation to a DataFrame (i.e. basically in every data analysis), I favor method chaining for better readability and efficiency. However, some operations stayed rather obscure to me for a long time, like renaming all columns in a single operation. Here are some tips that may come in handy.
Setup
# Import library
import pandas as pd
# Create sample DataFrame
df = pd.DataFrame({'First Name': ['John', 'Aby', 'Bob', 'Alice'],
'Last Name': ['Doe', 'Parker', 'Morris', 'Allen']})
df| First Name | Last Name | |
|---|---|---|
| 0 | John | Doe |
| 1 | Aby | Parker |
| 2 | Bob | Morris |
| 3 | Alice | Allen |
Classic, non-chained method
A standard way of applying transformative functions to all columns names would be the following:
# Classic way
df2 = df.copy()
df2.columns = [col.lower().replace(' ', '_') for col in df2.columns]
df2| first_name | last_name | |
|---|---|---|
| 0 | John | Doe |
| 1 | Aby | Parker |
| 2 | Bob | Morris |
| 3 | Alice | Allen |
Apply transformative functions
With pandas method chaining, you can apply functions to transform names with .rename(columns=<function>).
Applying a function that does not require any argument, like lower() or title(), is very short:
# Method chaining: convert to lowercase
df.rename(columns=str.lower)| first name | last name | |
|---|---|---|
| 0 | John | Doe |
| 1 | Aby | Parker |
| 2 | Bob | Morris |
| 3 | Alice | Allen |
For a function that requires arguments, like str.replace(), use a lambda:
# Method chaining: replace strings
df.rename(columns=lambda x: x.replace(' ', ''))| FirstName | LastName | |
|---|---|---|
| 0 | John | Doe |
| 1 | Aby | Parker |
| 2 | Bob | Morris |
| 3 | Alice | Allen |
Specify new names to columns
If you want to specify a list of new columns names, use set_axis():
# Method chaining: rename all columns
df.set_axis(['given_name', 'family_name'], axis=1)| given_name | family_name | |
|---|---|---|
| 0 | John | Doe |
| 1 | Aby | Parker |
| 2 | Bob | Morris |
| 3 | Alice | Allen |