Welcome to this comprehensive guide on how to rename columns in a Pandas DataFrame. If you’re new to data manipulation in Python, you might be wondering what Pandas is. Pandas is a powerful Python library widely used for data analysis, data manipulation, and data visualization. One of its primary objects is the DataFrame, which you can think of as an in-memory 2D table (like a spreadsheet), with labeled axes (rows and columns). In many instances, the DataFrame will be the central object you interact with when manipulating your data.
Renaming columns in a Pandas DataFrame is a crucial operation, especially when you’re working with data sets that may not have the most descriptive or appropriate column names to begin with. This process helps make your data more readable and accessible, allowing for a better workflow, easier data analysis, and more effective visualizations. This article aims to be your go-to guide for all things related to the “Pandas rename column” operation. We’ll cover everything from the basic syntax to more advanced techniques, ensuring you’re well-equipped to make your data cleaner and more intuitive to understand.
Different Methods to Rename Columns in Pandas
- Using the
renameMethod: The most straightforward approach to rename one or more columns, offering flexibility and readability. - Modification of
DataFrame.columns: Directly altering theDataFrame.columnsattribute to rename all the columns at once. - Using the
set_axisMethod: Useful for renaming columns while chaining DataFrame methods, as it can be used inline within method chains. - Using
df.columns.strOperations: Convenient for string manipulations to alter column names, such as converting all to uppercase or lowercase. - Using a Function with
rename: Applying a function to all column names, useful for batch processing. - Using
inplace=Truevs Copying: Discussion on whether to modify the original DataFrame (inplace=True) or create a new one with renamed columns. - Using
mapperParameter inrename: An alternative tocolumnsparameter, especially useful when renaming rows and columns simultaneously. - Renaming While Reading Data: Renaming columns directly while reading the data from a CSV or Excel file using the names parameter in read_csv or read_excel.
- Using
add_prefixandadd_suffix: Quickly add a prefix or suffix to all column names in a DataFrame. - Renaming in Concatenation and Merging: Renaming columns when you are performing operations like concatenation or merging to avoid column name conflicts.
1. Using the rename() Method
Single Column Renaming
Sometimes you just need to rename a single column in your DataFrame. In
this section, we’ll walk through a step-by-step example to demonstrate
how to rename a single column using the rename method.
To rename a single column, use the rename method and pass a dictionary
to its columns parameter, where the key is the old column name and the
value is the new column name. Here, we’ll rename the column ‘Name’ to
‘Full Name’.
import pandas as pd
# Create a sample DataFrame
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'Occupation': ['Engineer', 'Doctor', 'Artist']
})
# Display the DataFrame
print("Original DataFrame:")
print(df)
# Rename the 'Name' column to 'Full Name'
df.rename(columns={'Name': 'Full Name'}, inplace=True)
# Display the updated DataFrame
print("DataFrame After Renaming:")
print(df)
Output
The DataFrame after renaming will look like this:
Original DataFrame:
Name Age Occupation
0 Alice 25 Engineer
1 Bob 30 Doctor
2 Charlie 35 Artist
DataFrame After Renaming:
Full Name Age Occupation
0 Alice 25 Engineer
1 Bob 30 Doctor
2 Charlie 35 Artist
As you can see, the column formerly known as ‘Name’ has been
successfully renamed to ‘Full Name’. We used inplace=True to modify
the original DataFrame. If you want to keep the original DataFrame
intact, you can remove inplace=True, and the rename method will
return a new DataFrame with the column renamed.
Multiple Columns Renaming
Renaming multiple columns at once is as straightforward as renaming a
single column, especially when you’re using the rename method. You can
pass a dictionary with multiple key-value pairs to rename more than one
column. In this section, we’ll go through an example to show you how
it’s done.
To rename multiple columns, you’ll still use the rename method. This
time, the dictionary you pass to the columns parameter will have more
than one key-value pair. Let’s rename ‘Name’ to ‘Full Name’ and
‘Occupation’ to ‘Job Title’.
import pandas as pd
# Create a sample DataFrame
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'Occupation': ['Engineer', 'Doctor', 'Artist']
})
# Display the original DataFrame
print("Original DataFrame:")
print(df)
# Rename multiple columns
df.rename(columns={'Name': 'Full Name', 'Occupation': 'Job Title'}, inplace=True)
# Display the updated DataFrame
print("DataFrame After Renaming <a title="5 ways to select multiple columns in a pandas DataFrame" href="https://www.golinuxcloud.com/pandas-select-multiple-columns-examples/" target="_blank" rel="noopener noreferrer">Multiple Columns</a>:")
print(df)
After renaming, the DataFrame will look like this:
Original DataFrame:
Name Age Occupation
0 Alice 25 Engineer
1 Bob 30 Doctor
2 Charlie 35 Artist
DataFrame After Renaming Multiple Columns:
Full Name Age Job Title
0 Alice 25 Engineer
1 Bob 30 Doctor
2 Charlie 35 Artist
Both ‘Name’ and ‘Occupation’ have been renamed to ‘Full Name’ and ‘Job Title’, respectively.
In-Place Renaming
In Pandas, many operations return a new DataFrame by default, leaving
the original DataFrame unchanged. While this is safe, sometimes you may
want to perform the operation directly on the original DataFrame to save
memory or simplify your code. This is where the inplace parameter
comes into play.
What Does inplace Do?
The inplace parameter is a boolean that determines whether the
DataFrame should be modified in place. Setting inplace=True will
modify the DataFrame object directly. On the other hand, setting
inplace=False or not specifying the inplace parameter will leave the
original DataFrame intact and return a new DataFrame with the operation
applied.
Example Without inplace
Here’s how to use rename without the inplace parameter:
import pandas as pd
# Create a sample DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
# Rename the 'Name' column and create a new DataFrame
new_df = df.rename(columns={'Name': 'Full Name'})
# Original DataFrame remains unchanged
print("Original DataFrame:")
print(df)
# New DataFrame with the column renamed
print("New DataFrame:")
print(new_df)
Output:
Original DataFrame:
Name Age
0 Alice 25
1 Bob 30
New DataFrame:
Full Name Age
0 Alice 25
1 Bob 30
Example With inplace=True
Now let’s look at using rename with inplace=True:
# Rename the 'Name' column in the original DataFrame
df.rename(columns={'Name': 'Full Name'}, inplace=True)
# Original DataFrame is now modified
print("Modified DataFrame:")
print(df)
Output:
Modified DataFrame:
Full Name Age
0 Alice 25
1 Bob 30
When to Use inplace=True
- Use
inplace=Truewhen you’re certain you won’t need the original DataFrame anymore, and you want to save memory. - It can also make the code a bit simpler and easier to read if you have a sequence of transformations to apply.
When Not to Use inplace=True
- If you’re experimenting and need to keep the original DataFrame intact.
- If you want to create a new DataFrame based on the original but with some modifications.
Using axis Parameter
The axis parameter in the rename method allows you to specify which
axis you’d like to rename: rows (axis=0) or columns (axis=1). By
default, axis=0, which means that the renaming operation will target
row labels (index). To rename columns, you must set axis=1.
DataFrame.rename(mapper, axis={'index', 'columns'}, ...)
Renaming Columns with axis=1
When renaming columns, you can explicitly set axis=1.
import pandas as pd
# Create a simple DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# Rename columns
df.rename(columns={'A': 'X', 'B': 'Y'}, axis=1, inplace=True)
print(df)
Renaming Rows with axis=0
To rename rows, set axis=0.
# Rename rows
df.rename({0: 'a', 1: 'b', 2: 'c'}, axis=0, inplace=True)
print(df)
Using axis with Strings
You can also pass in the string 'index' or 'columns' for clarity.
# Rename columns
df.rename(columns={'X': 'New_X'}, axis='columns', inplace=True)
# Rename rows
df.rename({'a': 'New_a'}, axis='index', inplace=True)
print(df)
2. Modification of DataFrame.columns
If you want to rename all columns in a DataFrame in one go, directly
modifying the DataFrame.columns attribute can be a quick and easy way
to do it. This approach bypasses the need for a separate function call,
making your code shorter and potentially improving its readability.
How Does It Work?
The DataFrame.columns attribute is an index object that holds the
names of all the DataFrame’s columns. You can assign a new list of names
to this attribute, effectively renaming all columns in a single step.
Here is a Python code snippet that demonstrates this method:
import pandas as pd
# Create a DataFrame with original column names
df = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Age': [28, 32]
})
# Display original DataFrame
print("Original DataFrame:")
print(df)
# Modify DataFrame.columns to rename all columns
df.columns = ['Full Name', 'Years Old']
# Display DataFrame with renamed columns
print("\nDataFrame with Renamed Columns:")
print(df)
This method is particularly useful when you want to change all the column names quickly.
3. Using the set_axis Method
The set_axis method in Pandas allows you to rename axis labels (either
row index labels or column names) inline, meaning it can be used within
method chains. This method is especially handy if you like to perform
multiple DataFrame manipulations in a single, chained command.
How Does It Work?
The set_axis method replaces the existing axis labels with new ones.
When applied to columns, the first parameter is the list of new column
names, and the second parameter axis=1 specifies that the operation is
for columns.
Below is a Python code snippet showcasing how you can use the set_axis
method to rename columns:
import pandas as pd
# Create a DataFrame
df = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Age': [28, 32]
})
# Rename columns using set_axis and display the result
new_df = df.set_axis(['Full Name', 'Years Old'], axis=1)
print(new_df)
Inline Renaming within Method Chains
You can use set_axis inline within method chains. This allows you to
perform several operations in a single line. Here’s an example:
# Create a DataFrame, perform a calculation, and rename columns all in one chain
result = (
pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
.assign(C=lambda df: df['A'] + df['B'])
.set_axis(['Alpha', 'Beta', 'Gamma'], axis=1)
)
print(result)
The set_axis method is especially useful when you are performing
multiple operations on a DataFrame and want to rename columns without
breaking the method chain. It can make your code more readable and
potentially more efficient.
4.Using df.columns.str Operations
The df.columns.str attribute exposes a series of string methods that
can be used to manipulate the column names of a DataFrame in Pandas.
This is particularly convenient for performing string operations
directly on the column labels without having to loop through each name
manually. For instance, you can easily change all column names to
uppercase or lowercase, or even replace specific characters.
How Does It Work?
The .str attribute exposes various string methods that can be applied
to the DataFrame’s column names. The operation is vectorized, meaning it
applies to all column names at once.
Here’s a Python code snippet that demonstrates how to change all column names to uppercase:
import pandas as pd
# Create a DataFrame
df = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Age': [28, 32]
})
# Convert column names to uppercase
df.columns = df.columns.str.upper()
print(df)
Other String Operations
Lowercase: Convert all column names to lowercase.
df.columns = df.columns.str.lower()
Replace Characters: Replace spaces with underscores.
df.columns = df.columns.str.replace(' ', '_')
Substring: Extract first 3 characters from each column name.
df.columns = df.columns.str[0:3]
Using df.columns.str methods can be an extremely convenient way to
rename or modify all or a subset of the columns in your DataFrame,
particularly when the desired change can be expressed as a string
operation.
5. Using a Function with rename
In scenarios where you want to perform more complex operations that
can’t be easily accomplished with built-in string methods, you can pass
a function to the rename method in Pandas. This is especially useful
for batch processing of column names, where you can encapsulate the
renaming logic in a function and apply it to all columns at once.
How Does It Work?
The rename method accepts a function as its argument, and this
function is then applied to each column name. This allows for the
customization of column renaming using Python’s powerful functions.
Here’s a Python code snippet demonstrating how to prefix each column name with ‘My_’:
import pandas as pd
# Create a DataFrame
df = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Age': [28, 32]
})
# Function to prefix each column name
def prefix_with_my(col_name):
return 'My_' + col_name
# Apply function to rename columns
df.rename(columns=prefix_with_my, inplace=True)
print(df)
Using Lambda Functions
You can also use lambda functions for shorter transformations. Here’s how to make each column name uppercase:
df.rename(columns=lambda x: x.upper(), inplace=True)
print(df)
Using a function with the rename method allows for a high degree of
customization and can be particularly useful when you have complex
renaming needs that go beyond simple string manipulations.
6. Using inplace=True vs Copying
When using the rename method to change column names in a Pandas
DataFrame, you have the option to either modify the original DataFrame
or create a new one with the updated column names. This decision hinges
on the inplace parameter, and it’s crucial to understand how it works
to use it effectively.
inplace=True
Setting the inplace=True parameter modifies the DataFrame object in
place, meaning it directly changes the original DataFrame and returns
None. This method is memory-efficient since it doesn’t create a new
object but could be risky if you want to maintain the original DataFrame
for later use.
df.rename(columns={'OldName': 'NewName'}, inplace=True)
Copying (Default behavior, inplace=False)
By default, the rename method returns a new DataFrame with the changed
column names, leaving the original DataFrame unchanged. This is useful
if you want to keep the original DataFrame for future reference.
new_df = df.rename(columns={'OldName': 'NewName'})
When to Use Which?
- Use
inplace=Truewhen you’re sure you won’t need the original DataFrame and want to save memory. - Create a copy when you need to maintain the original DataFrame for comparison, backup, or other operations.
7. Using mapper Parameter in rename
In Pandas, the rename method provides great flexibility in renaming
columns and rows of a DataFrame. One such flexibility is offered by the
mapper parameter, which can be particularly useful when you need to
rename both rows and columns simultaneously. The mapper parameter
works in conjunction with the axis parameter to specify what gets
renamed.
Basic Syntax
The mapper parameter accepts a dictionary, Series, or a function. The
keys are the old names, and the values are the new names.
df.rename(mapper={'OldColumnName': 'NewColumnName', 'OldRowName': 'NewRowName'}, axis=1)
df.rename(mapper={'OldColumnName': 'NewColumnName', 'OldRowName': 'NewRowName'}, axis=0)
Renaming Columns
You can rename columns by setting the axis parameter to ‘columns’ or
1.
df.rename(mapper={'OldColumnName1': 'NewColumnName1', 'OldColumnName2': 'NewColumnName2'}, axis='columns')
Renaming Rows
To rename rows, you set the axis parameter to ‘index’ or 0.
df.rename(mapper={0: 'NewRowName1', 1: 'NewRowName2'}, axis='index')
Renaming Both Rows and Columns Simultaneously
You can rename both rows and columns in the same rename method call by
passing dictionaries to the index and columns parameters.
df.rename(index={0: 'NewRowName1', 1: 'NewRowName2'}, columns={'OldColumnName1': 'NewColumnName1', 'OldColumnName2': 'NewColumnName2'})
In this case, you don’t explicitly need to use the mapper parameter as
you are specifying index and columns separately.
8. Renaming While Reading Data
When working with Pandas, you often have to
read data
from external files like CSV or Excel. In many cases, it is
advantageous to rename columns as you read the data into a DataFrame.
This makes your workflow faster and your code more efficient. Luckily,
Pandas provides a way to achieve this through the names parameter in
the read_csv and read_excel functions.
Basic Syntax
The names parameter allows you to provide a list of column names that
you want to use, effectively renaming the columns as you read the data.
import pandas as pd
# For CSV files
df_csv = pd.read_csv('data.csv', names=['NewColumnName1', 'NewColumnName2', 'NewColumnName3'])
# For Excel files
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1', names=['NewColumnName1', 'NewColumnName2', 'NewColumnName3'])
Skipping the Original Header
In most real-world datasets, the original column names would be part of
the first row in the file. Using the skiprows parameter, you can skip
this row to prevent it from becoming a part of your DataFrame.
# Skipping the first row (original header) for CSV
df_csv = pd.read_csv('data.csv', skiprows=1, names=['NewColumnName1', 'NewColumnName2', 'NewColumnName3'])
# Skipping the first row (original header) for Excel
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1', skiprows=1, names=['NewColumnName1', 'NewColumnName2', 'NewColumnName3'])
9. Using add_prefix and add_suffix
In data analysis and manipulation tasks, it’s often useful to modify the
names of all columns in a DataFrame in a consistent way. Pandas provides
two convenient methods for these tasks: add_prefix() and
add_suffix(). These methods can save you a lot of time when you want
to quickly add a common prefix or suffix to all the column names.
Basic Syntax
The add_prefix() and add_suffix() methods are straightforward to
use. You just need to pass the string you want to add as a prefix or
suffix to the method.
import pandas as pd
# Create a sample DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [28, 34], 'Occupation': ['Engineer', 'Doctor']})
# Add prefix
df_with_prefix = df.add_prefix('Col_')
# Add suffix
df_with_suffix = df.add_suffix('_Field')
print("DataFrame with prefix:")
print(df_with_prefix)
print("\nDataFrame with suffix:")
print(df_with_suffix)
Output
DataFrame with prefix:
Col_Name Col_Age Col_Occupation
0 Alice 28 Engineer
1 Bob 34 Doctor
DataFrame with suffix:
Name_Field Age_Field Occupation_Field
0 Alice 28 Engineer
1 Bob 34 Doctor
10. Renaming in Concatenation and Merging: Avoid Column Name Conflicts
When working with multiple DataFrames, you often need to concatenate or merge them. During these operations, column name conflicts can arise if two or more DataFrames have columns with the same name. To resolve these conflicts and maintain clarity in the resulting DataFrame, you can rename the columns before or during the concatenation or merging process.
Basic Syntax for Concatenation
When concatenating DataFrames, you can use the keys parameter to
attach a hierarchical index that helps distinguish the source of each
row. This doesn’t directly rename the columns, but it adds a level of
indexing to help differentiate the data.
import pandas as pd
# Create two DataFrames with the same column names
df1 = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [28, 34]})
df2 = pd.DataFrame({'Name': ['Eve', 'Dave'], 'Age': [23, 45]})
# Concatenate DataFrames with keys
result = pd.concat([df1, df2], keys=['DataFrame_1', 'DataFrame_2'])
print(result)
Renaming Columns Before Merging
You can also rename the columns before merging to avoid conflicts. Use
the rename method for this.
# Create two DataFrames with a common column name ('ID')
df1 = pd.DataFrame({'ID': [1, 2], 'Name': ['Alice', 'Bob']})
df2 = pd.DataFrame({'ID': [1, 2], 'Value': [23, 45]})
# Rename columns in df2
df2.rename(columns={'ID': 'ID_2'}, inplace=True)
# Merge DataFrames
merged_df = pd.merge(df1, df2, left_on='ID', right_on='ID_2')
print(merged_df)
Renaming Columns During Merging
Alternatively, you can use the suffixes parameter during the merging
process to rename conflicting columns automatically.
# Merge with suffixes for conflicting columns
merged_df = pd.merge(df1, df2, left_on='ID', right_on='ID', suffixes=('_left', '_right'))
print(merged_df)
Conclusion
Renaming columns in a Pandas DataFrame is a common but essential task in
data manipulation and analysis. Whether you’re dealing with single or
multiple columns, there are multiple methods and parameters to help you
effectively rename them. Understanding the flexibility of the rename
method, the utility of the axis parameter, as well as alternatives
like direct modification of DataFrame.columns, allows for clean and
efficient code. It is also crucial to be aware of best practices like
when to use inplace=True versus when to create a new DataFrame. By
grasping these key concepts, you’re well on your way to becoming
proficient in data manipulation using Pandas.

![How to PROPERLY Rename Column in Pandas [10 Methods]](/pandas-rename-column/pandas_rename.jpg)
