The Pandas method as_matrix is deprecated as of version 0.23.0. If you want to convert a DataFrame to its NumPy array representation, you can use DataFrame.values()
or DataFrame.to_numpy
.
This tutorial will go through how to solve this error with code examples.
Table of contents
AttributeError: ‘DataFrame’ object has no attribute ‘as_matrix’
AttributeError occurs in a Python program when we try to access an attribute (method or property) that does not exist for a particular object. The part of the error ‘DataFrame’ object has no attribute ‘as_matrix‘ tells us that the DataFrame object we are handling does not have the as_matrix as an attribute. The as_matrix()
method is deprecated as of version 0.23.0, so if you are using a version after 0.23.0 you will get the AttributeError.
Example
Let’s look at an example where we want to convert a DataFrame to a NumPy array. We will start with a CSV file containing pizza names and prices. We will save the file as pizzas.csv
.
pizza,price margherita,£7.99 pepperoni,£8.99 four cheeses,£10.99 funghi,£8.99
Next, we will load the data into a DataFrame using pandas.
import pandas as pd df = pd.read_csv('pizzas.csv') print(df)
pizza price 0 margherita £7.99 1 pepperoni £8.99 2 four cheeses £10.99 3 funghi £8.99
We want the pizza prices to be floating-point numbers instead of strings. We will use the string accessor method to remove the £
character and then cast the column to float using astype()
.
df.price = df.price.str.replace('£','').astype(float) print(df.price)
0 7.99 1 8.99 2 10.99 3 8.99 Name: price, dtype: float64
Then we will try to convert the DataFrame to a NumPy array using as_matrix
.
arr = df.as_matrix() print(arr)
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Input In [23], in <cell line: 1>() ----> 1 arr = df.as_matrix() 2 print(arr) File ~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py:5583, in NDFrame.__getattr__(self, name) 5576 if ( 5577 name not in self._internal_names_set 5578 and name not in self._metadata 5579 and name not in self._accessors 5580 and self._info_axis._can_hold_identifiers_and_holds_name(name) 5581 ): 5582 return self[name] -> 5583 return object.__getattribute__(self, name) AttributeError: 'DataFrame' object has no attribute 'as_matrix'
The error occurs because as_matrix()
is a deprecated method.
Solution
To solve this error we can either use DataFrame.values
or DataFrame.to_numpy()
. Let’s look at how to convert the DataFrame to a NumPy array using values
:
arr = df.values print(arr) print(type(arr))
Let’s run the code to get the result.
[['margherita' 7.99] ['pepperoni' 8.99] ['four cheeses' 10.99] ['funghi' 8.99]] <class 'numpy.ndarray'>
Let’s look at how to convert a DataFrame to a NumPy array using to_numpy()
.
arr = df.to_numpy() print(arr) print(type(arr))
Let’s run the code to see the result:
[['margherita' 7.99] ['pepperoni' 8.99] ['four cheeses' 10.99] ['funghi' 8.99]] <class 'numpy.ndarray'>
Summary
Congratulations on reading to the end of this tutorial! The method as_matrix is deprecated as of pandas version 0.23.0. You can use DataFrame.values
or DataFrame.to_numpy
instead.
For further reading on deprecated Pandas methods, go to the article:
- How to Solve Python AttributeError: ‘DataFrame’ object has no attribute ‘ix’
- How to Solve Python AttributeError: module ‘pandas’ has no attribute ‘rolling_mean’
To learn more about Python for data science and machine learning, go to the online courses page on Python for the most comprehensive courses available.
Have fun and happy researching!
Suf is a senior advisor in data science with deep expertise in Natural Language Processing, Complex Networks, and Anomaly Detection. Formerly a postdoctoral research fellow, he applied advanced physics techniques to tackle real-world, data-heavy industry challenges. Before that, he was a particle physicist at the ATLAS Experiment of the Large Hadron Collider. Now, he’s focused on bringing more fun and curiosity to the world of science and research online.