Ваши a
и b
являются массивами dtype объектов.Вы говорите
с формой (13,), соответствующей 13 листам, которые я импортировал выше
, и ошибка указывает, что элементы массивов являются сериями.
type(a[0]) # what is it?
Математика для массивов объектов dtype является хитом или ошибкой:
In [195]: x = np.array([1.2, 2.3], object)
In [196]: np.sqrt(x)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-196-0b43c7e80401> in <module>()
----> 1 np.sqrt(x)
AttributeError: 'float' object has no attribute 'sqrt'
In [197]: (x+x)/2
Out[197]: array([1.2, 2.3], dtype=object)
Она делегирует математику методам объектов.+ и / работа, потому что соответствующие методы определены (для float в моем примере, Series в вашем).Но большинство классов не определяют метод sqrt
, что приводит к ошибке.
Если все ваши начальные кадры данных имели одинаковое количество строк, массивы a
, сделанные из них, были бы двумерными числовымиDTYPE.Вы могли бы сделать всю математику на них.Но поскольку кадры данных отличаются, массив, созданный из Series, является массивом dtype объектов Series.
In [201]: df1 = pd.DataFrame(np.arange(12).reshape(4,3))
2d числовой массив из Series такого же размера:
In [204]: x=np.array([df1.loc[:,0], df1.loc[:,1]])
In [205]: x
Out[205]:
array([[ 0, 3, 6, 9],
[ 1, 4, 7, 10]])
In [206]: x.dtype
Out[206]: dtype('int64')
Объектмассив с различными размерами Series:
In [207]: df2 = pd.DataFrame(np.arange(15).reshape(5,3))
In [208]: x=np.array([df1.loc[:,0], df2.loc[:,0]])
In [210]: type(x[0])
Out[210]: pandas.core.series.Series
Суммирование по массиву объектов работает, но обратите внимание на dtype
In [212]: x+x
Out[212]:
array([0 0
1 6
2 12
3 18
Name: 0, dtype: int64,
0 0
1 6
2 12
3 18
4 24
Name: 0, dtype: int64], dtype=object)
In [213]: np.sqrt(x)
...
AttributeError: 'Series' object has no attribute 'sqrt'