The Pandas module is a popular Python module used for data analysis purposes.
When working with a Pandas DataFrame object, you may encounter an error that says:
AttributeError: 'DataFrame' object has no attribute 'ix'
You get this AttributeError: 'DataFrame' object has no attribute 'ix'
because the ix
method has been deprecated and removed in the latest Pandas version.
The following article will show you how to fix this error.
How to reproduce the error
For example, imagine you have the following DataFrame in your Python project:
Age Score
Nathan 29 72
Lisa 25 88
Mike 22 67
Now you are tasked to get the first two rows of the data.
If you use the ix
method as follows:
import pandas as pd
df = pd.DataFrame(
{"Age": [29, 25, 22], "Score": [72, 88, 67]},
index=["Nathan", "Lisa", "Mike"]
)
print(df.ix[:2])
But the ix
method has been deprecated and removed in Pandas version 1.0.0, so running the code above will produce the error below:
Traceback (most recent call last):
File ...
print(df.ix[:2])
...
return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'ix'
To fix this error, you need to replace the ix
method with either iloc
or loc
method.
Let’s see an example of using these methods next!
Replace ix with iloc or loc
The iloc
method is used to access a row by its integer index, so you can use it like this:
import pandas as pd
df = pd.DataFrame(
{"Age": [29, 25, 22], "Score": [72, 88, 67]},
index=["Nathan", "Lisa", "Mike"]
)
print(df.iloc[:2])
# Output:
# Age Score
# Nathan 29 72
# Lisa 25 88
On the other hand, the loc
method is used for label-based indexing.
Because the example data has the index
parameter, you can use the value for label-based slicing as follows:
import pandas as pd
df = pd.DataFrame(
{"Age": [29, 25, 22], "Score": [72, 88, 67]},
index=["Nathan", "Lisa", "Mike"]
)
print(df.loc["Lisa"])
# Output
# Age 25
# Score 88
# Name: Lisa, dtype: int64
Keep in mind that when you pass the index
parameter to the iloc
method, Python will show another error.
Previously, the ix
method can process both label-based and integer-based indexing. It will first process label-based indexing, then fall back to integer-based indexing when it fails.
But because the ix
method wasn’t consistent, it was deprecated in favor of loc
and iloc
methods for slicing and indexing.
If you still want to use the ix
method for indexing, then you need to downgrade your pandas
module to below version 1.0.0
.
Conclusion
Now you’ve learned why the AttributeError: 'DataFrame' object has no attribute 'ix'
occurs and how to fix it.
To avoid this error, you need to replace the call to ix
method with either iloc
or loc
method.
Good work solving the error. I look forward to seeing you next time! 👋