How to PROPERLY Rename Column in Pandas [10 Methods]


Written by - Deepak Prasad

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

  1. Using the rename Method: The most straightforward approach to rename one or more columns, offering flexibility and readability.
  2. Modification of DataFrame.columns: Directly altering the DataFrame.columns attribute to rename all the columns at once.
  3. Using the set_axis Method: Useful for renaming columns while chaining DataFrame methods, as it can be used inline within method chains.
  4. Using df.columns.str Operations: Convenient for string manipulations to alter column names, such as converting all to uppercase or lowercase.
  5. Using a Function with rename: Applying a function to all column names, useful for batch processing.
  6. Using inplace=True vs Copying: Discussion on whether to modify the original DataFrame (inplace=True) or create a new one with renamed columns.
  7. Using mapper Parameter in rename: An alternative to columns parameter, especially useful when renaming rows and columns simultaneously.
  8. 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.
  9. Using add_prefix and add_suffix: Quickly add a prefix or suffix to all column names in a DataFrame.
  10. 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=True when 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=True when 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.

Additional Resources

  1. Pandas Official Documentation: rename method
  2. Stack Overflow: How to rename columns in Pandas
  3. DataFrame.rename()

Deepak Prasad

He is the founder of GoLinuxCloud and brings over a decade of expertise in Linux, Python, Go, Laravel, DevOps, Kubernetes, Git, Shell scripting, OpenShift, AWS, Networking, and Security. With extensive experience, he excels in various domains, from development to DevOps, Networking, and Security, ensuring robust and efficient solutions for diverse projects. You can reach out to him on his LinkedIn profile or join on Facebook page.

Can't find what you're searching for? Let us assist you.

Enter your query below, and we'll provide instant results tailored to your needs.

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

Buy GoLinuxCloud a Coffee

For any other feedbacks or questions you can send mail to admin@golinuxcloud.com

Thank You for your support!!

Leave a Comment