The Pandas error 'list' object is not callable
is raised when we try to rename dataframe columns. Usually this means that we try to use list instead of a dict with method: .rename()
.
df.rename(columns=['A', 'B', 'C'])
results into:
TypeError: 'list' object is not callable
while
cols = {'A':'AA', 'B': 'BB', 'C': 'CC'}
df.rename(columns=cols)
works fine.
Here's how to correctly rename columns in pandas and avoid the error:
1. Rename with a dictionary using .rename()
The correct syntax for renaming Pandas columns is:
df = df.rename(columns={'old_name': 'new_name'})
Below you can find full example of renaming columns:
import pandas as pd
df = pd.DataFrame({
"A": [0, 1, 2, 3],
"B": [3, 5, 7, 9],
"C": [1, 2, 3, 4]
})
cols = {'A':'AA', 'B': 'BB', 'C': 'CC'}
df.rename(columns=cols)
2. Replace all headers at once using df.columns = [...]
df.columns = ['AA', 'BB', 'CC']
3. Mistake TypeError: 'Index' object is not callable
Similar miskate TypeError: 'Index' object is not callable
is raised when we try to invoke dataframe attribute as a method:
df.columns('name', 'age', 'country')
This is because df.columns
is attribe, and we're using ()
as if it were a function.
Error:
df.columns('A', 'B', 'C')
Solution:
df.columns = ['A', 'B', 'C']
This typically happens with incorrect use of parentheses ()
instead of square brackets []
.
In this short post we saw the reasons and solutions for 2 typical Pandas errors:
TypeError: 'list' object is not callable
TypeError: 'Index' object is not callable