I am new to Python and notice the following error when using min()
.
import pandas as pd
a = [1,2,3,4,5]
print(min(20, pd.array(a)**2))
The code should return[1, 4, 9, 16, 20], however, it returns [1, 4, 9, 16, 25]. It seems that min()
is not working as expected. What is the reason and how can I fix it? Thank you.
>Solution :
min
in Python operates on scalar values, not collections of values. That said, pandas
is built on a base of numpy
, and numpy
does offer an element-wise minimum function of this sort, so by mixing pandas
and numpy
you can get what you expect:
import pandas as pd
import numpy as np # Get numpy as well
a = [1,2,3,4,5]
# Creates a pandas array, but gets element-wise minimums via numpy.minimum
print(np.minimum(20, pd.array(a)**2))
which, on the W3Schools pandas
interpreter I just loaded to verify, outputs:
<IntegerArray>
[1, 4, 9, 16, 20]
Length: 5, dtype: Int64
Somewhat surprisingly, but conveniently, this even returns a new pandas
array, not a numpy
array; the integration between the two of them is deep enough that you keep your expected types even through the non-pandas
function.