Reputation: 1004
I am using NumPy 1.24.0.
On running this sample code line,
import numpy as np
num = np.float(3)
I am getting this error:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/ubuntu/.local/lib/python3.8/site-packages/numpy/__init__.py", line 284, in __getattr__
raise AttributeError("module {!r} has no attribute " AttributeError: module 'numpy' has no attribute 'float'
How can I fix it?
Upvotes: 75
Views: 171951
Reputation: 33
I had this problem today, too. My solution is changing the „np.float“ into „np.float64“ in the code which causes the error. Which code caused the problem needs to check the error message (traceback). After renaming it, the error message has been fixed.
Upvotes: 0
Reputation: 9243
In NumPy 1.24.0
, the float
attribute was removed from the main NumPy module. Instead, you should use the numpy.float64
or numpy.float32
classes to create a floating-point number.
Here's update version of your code:
import numpy as np
num = np.float64(3)
Upvotes: 1
Reputation: 480
You can use the following monkey patches for the dependencies to run:
np.float = float
np.int = int #module 'numpy' has no attribute 'int'
np.object = object #module 'numpy' has no attribute 'object'
np.bool = bool #module 'numpy' has no attribute 'bool'
Upvotes: 24
Reputation: 27870
numpy-1.24.3
Link : https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
Instead of np.float
you can use any one of these
>>float
>>numpy.float64
>>numpy.double
>>numpy.float_
Upvotes: 1
Reputation: 131
I solved by updating my "openpyxl" using
{pip install --upgrade openpyxl}
The error came up while trying to read an excel file
Upvotes: 13
Reputation: 21
I faced the same issue when I was reading a .xlsx file. You can convert it to csv and this will resolve the issue. However for updating numpy some times you need to get the directory of numpy package:
import numpy
print(numpy.__path__)
For updating it you can use the code below:
pip install numpy --upgrade
You can also check this page: How can I upgrade NumPy?
Upvotes: 0
Reputation: 1597
In the 1.24 version:
The deprecation for the aliases np.object, np.bool, np.float, np.complex, np.str, and np.int is expired (introduces NumPy 1.20). Some of these will now give a FutureWarning in addition to raising an error since they will be mapped to the NumPy scalars in the future.
pip install "numpy<1.24"
to work around it.
In [1]: import numpy as np
In [2]: np.__version__
Out[2]: '1.23.5'
In [3]: np.float(3)
<ipython-input-3-8262e04d58e1>:1: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
np.float(3)
Out[3]: 3.0
Upvotes: 38
Reputation: 14345
The answer is already provided in the comments by @mattdmo and @tdelaney:
NumPy 1.20 (release notes) deprecated numpy.float
, numpy.int
, and similar aliases, causing them to issue a deprecation warning
NumPy 1.24 (release notes) removed these aliases altogether, causing an error when they are used
In many cases you can simply replace the deprecated NumPy types by the equivalent Python built-in type, e.g., numpy.float
becomes a "plain" Python float
.
For detailed guidelines on how to deal with various deprecated types, have a closer look at the table and guideline in the release notes for 1.20:
...
To give a clear guideline for the vast majority of cases, for the types
bool
,object
,str
(andunicode
) using the plain version is shorter and clear, and generally a good replacement. Forfloat
andcomplex
you can usefloat64
andcomplex128
if you wish to be more explicit about the precision.For
np.int
a direct replacement withnp.int_
orint
is also good and will not change behavior, but the precision will continue to depend on the computer and operating system. If you want to be more explicit and review the current use, you have the following alternatives:
np.int64
ornp.int32
to specify the precision exactly. This ensures that results cannot depend on the computer or operating system.np.int_
orint
(the default), but be aware that it depends on the computer and operating system.- The C types:
np.cint
(int
),np.int_
(long
),np.longlong
.np.intp
which is 32bit on 32bit machines 64bit on 64bit machines. This can be the best type to use for indexing....
If you have dependencies that use the deprecated types, a quick workaround would be to roll back your NumPy version to 1.24 or less (as suggested in some of the other answers), while waiting for the dependency to catch up. Alternatively, you could create a patch yourself and open a pull request, or monkey patch the dependency in your own code.
Upvotes: 64
Reputation: 488
I removed numpy.py and then updated my NumPy installation. It worked!
Note: NumPy version 1.23.3
Upvotes: 3