Почему встроенная функция abs()
не работает со списками Python, но корректно работает с массивами NumPy и сериями pandas?
Применение встроенной функции abs()
к Python list вызывает исключение
TypeError: неверный тип операнда для abs (): 'list'
Ничего удивительного, это соответствует документации:
abs (x)
Возвращает абсолютное значение числа. Аргумент может быть целым числом или числом с плавающей запятой. Если аргумент является комплексным числом, возвращается его величина.
Но та же функция ведет себя правильно (как векторизованная функция) для NumPy массивов и pandas серий:
In[2]: lst = [2, 0, -1]
In[3]: # abs(lst) # bad operand type for abs(): 'list'
In[4]: import numpy as np
In[5]: arr = np.array(lst)
In[6]: abs(arr) # no problem
Out[6]: array([2, 0, 1])
In[7]: import pandas as pd
In[8]: s = pd.Series(lst)
In[9]: abs(s) # no problem
Out[9]:
0 2
1 0
2 1
dtype: int64
In[10]: abs.__class__
Out[10]: builtin_function_or_method
Как это возможно?