Python 属性错误:';系列';对象没有属性';sqrt&x27;

Python 属性错误:';系列';对象没有属性';sqrt&x27;,python,pandas,numpy,Python,Pandas,Numpy,我正在使用从EXCEL导入并转换为列表的一些数据集: import pandas as pd import numpy as np datfrms = [] for i in xls.sheet_names: df = pd.read_excel(xls, i) datfrms.append(df) data_a = [] data_b = [] data_c = [] for dfs in d

我正在使用从EXCEL导入并转换为列表的一些数据集:

import pandas as pd
import numpy as np

datfrms = []
for i in xls.sheet_names:                                       
    df = pd.read_excel(xls, i)
    datfrms.append(df) 

data_a = []
data_b = []
data_c = []

for dfs in datfrms:
    data_a.append(dfs.loc[:,'data_a'])
    data_b.append(dfs.loc[:,'data_b'])
    data_c.append(dfs.loc[:,'data_c'])
然后,我想对数据进行一些计算,因此我决定通过执行一些计算将列表转换为numpy数组:

a = np.asarray([2 * (a + b) for a, b in zip(data_a, data_b])
b = np.asarray([c / 1000 for c in data_c])
因此,
a
b
c
现在被定义为
,形状
(13,)
,对应于我上面导入的13张图纸。每当我想访问第一张工作表中的数据时,我都会写,例如,
data\u a[0]

但是,如果要执行以下操作,则会出现一个错误,说明
AttributeError:'Series'对象没有属性'sqrt'

d = np.sqrt(a / b)
如果我手动写入,则不会生成错误:

d0 = np.sqrt(a[0] / b[0])
...
d12 = np.sqrt(a[12] / b[12])
但是如果我使用
type
函数,
d0
<代码>d12现在是
,而
a[0]
b[0]
都是

  • 我做错了什么
  • 为什么不允许我执行简单的平方根运算
我希望可以添加数据,但我无法通过在Python中生成合成数据来重新创建数据格式,我怀疑这可能是问题的核心(即,我在数据格式方面做了一些错误的事情)

user32185分别请求
a[0]
b[0]
的输出:

0     0.883871
1     0.885714
2     0.879378
3     0.865668
4     0.866014
5     0.860657
6     0.866071
7     0.884389
8     0.892339
9     0.892512
10    0.841590
11    0.841014
12    0.882200
13    0.857546
14    0.850576
15    0.853975
16    0.838710
dtype: float64


您的
a
b
是对象数据类型数组。你说

形状(13,),对应于我上面导入的13张图纸

错误表明数组的元素是串联的

type(a[0])   # what is it?
对象数据类型数组的数学命中或错误:

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)
来自相同大小系列的二维数字数组:

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')
具有不同大小系列的对象数组:

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
对象数组上的求和有效,但请注意数据类型

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'

您好,您是否介意生成a,您是否介意打印
a[0]
b[0]
的输出?尽管我努力将其简化为MCVE,但由于无法使用合成数据重新创建它,我还是无法做到这一点,我为我的愚蠢表示歉意。感谢您尝试理解我的问题,user32185。
a
b
是对象数据类型数组,包含序列,而不是数字。对象数组的数学是命中还是错误。要执行
sqrt
它将任务委托给sqrt方法,或者更确切地说是尝试和失败。请提供总体结构的摘要,例如N张excel表格,每个表格有M列和R行,以及您执行计算的“维度”?谢谢,hpaulj。事情就是这样。有时我会执行额外的测量来检查实验的重复性,因此行数可能会有所不同。一旦我从我的工作表中删除了这些额外的行,它就开始工作了。当谈到python时,我觉得自己是个白痴,完全陷入了困境,但我真的很想学习它,以便在我的研究中实现它。多亏了像你这样的人,我才能取得进展。:)
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
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'