首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AttributeError:(“‘序列’对象没有‘iterrows’属性”,u‘出现在索引标识符1')和其他问题

AttributeError:(“‘序列’对象没有‘iterrows’属性”,u‘出现在索引标识符1')和其他问题
EN

Stack Overflow用户
提问于 2019-04-19 11:35:39
回答 1查看 1.9K关注 0票数 0

当我试图将一个数据帧传递给我创建的函数时,我得到了一个AttributeError。

我有一个我创建的函数,它应该对我传递的数据帧中的一行执行一些基本操作,但前提是其中一个单元格包含某个特定值。第一篇文章如果太长了,很抱歉。以下是相关代码和错误。

代码语言:javascript
运行
复制
nitrogen.head()

    Identifier 1       Amount   Area 28  Percent Nitrogen d 15N/14N   d15N
0   sediment standard  1.568    23.478   0                -4.046      0
1   sediment standard  1.801    11.230   0                3.660       0
2   sediment standard  1.554    9.591    0                3.391       0
3   1c-50cm            12.322   36.075   0                4.349       0
4   1c-10cm            11.786   35.296   0                5.622       0

def correctNitrogen(data):
    for index, row in data.iterrows():
        if data.loc[index, 'Identifier 1'] == 'sediment standard':
            standardsP += (data['Amount']/data['Area 28'])*0.62
            standardsD += data['d 15N/14N']
            x += 1

    averageP = standardsP/x
    averageD = standardsD/x
    correcter = 4.42-averageD

    for index, row in data.iterrows():
        if data.loc[index, 'Identifier 1'] != 'sediment standard':
             data['Percent Nitrogen'] = averageP*(data['Area 28']/data['Amount'])
             data['d15N'] = data['d 15N/14N']+correcter

nitrogen.apply(correctNitrogen)

AttributeError                            Traceback (most recent call last)
<ipython-input-175-98f6b563e9b6> in <module>()
----> 1 nitrogen.apply(correctNitrogen)
      2 nitrogen.head()

C:\ProgramData\Anaconda2\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, broadcast, raw, reduce, args, **kwds)
   4260                         f, axis,
   4261                         reduce=reduce,
-> 4262                         ignore_failures=ignore_failures)
   4263             else:
   4264                 return self._apply_broadcast(f, axis)

C:\ProgramData\Anaconda2\lib\site-packages\pandas\core\frame.py in _apply_standard(self, func, axis, ignore_failures, reduce)
   4356             try:
   4357                 for i, v in enumerate(series_gen):
-> 4358                     results[i] = func(v)
   4359                     keys.append(v.name)
   4360             except Exception as e:

<ipython-input-157-ff5a7f145cc2> in correctNitrogen(data)
      2 # corrects it to the standard that is being used
      3 def correctNitrogen(data):
----> 4     for index, row in data.iterrows():
      5         if data.loc[index, 'Identifier 1'] == 'sediment standard':
      6             standardsP += (data['Amount']/data['Area 28'])*nit

C:\ProgramData\Anaconda2\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
   3079             if name in self._info_axis:
   3080                 return self[name]
-> 3081             return object.__getattribute__(self, name)
   3082 
   3083     def __setattr__(self, name, value):

AttributeError: ("'Series' object has no attribute 'iterrows'", u'occurred at index Identifier 1')

现在我意识到这个函数可能还有其他问题,但这是到目前为止我遇到的第一个问题。我觉得这与我将数据帧传递给函数的方式有关,但我不知道如何修复它。

EN

回答 1

Stack Overflow用户

发布于 2019-04-19 11:43:11

简而言之-在列/行上调用函数apply,这是一个pandas.Series,因此出现错误。

要在不修改函数的情况下进行修复,请调用:

代码语言:javascript
运行
复制
nitrogen = correctNitrogen(nitrogen)

但还要注意,您需要从函数返回DataFrame:

代码语言:javascript
运行
复制
def correctNitrogen(data):
    # do stuff
    return data
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55756266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档