对象类型 DataFrame 没有名为 Stats 的轴

问题描述

我正在尝试为 DataFrame 中的多行重用定义的函数。但我收到一个错误

对象类型 DataFrame 没有名为 Stats 的轴

d = {'Person': ['A','B','C','D','E','F'],'Stats':[17,117,-52,100,-6,101]}
ages = pd.DataFrame(data=d)

def my_jr(amount):
if amount > 0:
    print('amount greater than zero')
elif amount < 0:
    print('amount lesser than zero')
else:
    pass
ages.apply(my_jr,'Stats')

解决方法

这里的问题是您传递给 Panda 的 apply 方法的参数不符合预期。

第二个参数(它实际上是一个关键字参数)是 axis -- 0 或 1。来自 documentation

传递给函数的对象是索引为 DataFrame 的索引 (axis=0) 或 DataFrame 的列 (轴=1)。

因此,在这种情况下,您应该将 1 作为轴传递。函数 my_jr 的每个参数都是一个 Pandas Series 对象,然后您可以在 Stats 处对其进行索引以获取要比较的数值。

这是一个更正的版本:

import pandas as pd

d = {
    'Person': ['A','B','C','D','E','F'],'Stats': [17,117,-52,100,-6,101]
}

ages = pd.DataFrame(data=d)

def my_jr(series):
    amount = series['Stats']
    if amount > 0:
        print('amount greater than zero')
    elif amount < 0:
        print('amount lesser than zero')
    else:
        pass

ages.apply(my_jr,1)

哪个给出了预期的输出:

amount greater than zero
amount greater than zero
amount lesser than zero
amount greater than zero
amount lesser than zero
amount greater than zero

对于 Panda 的 apply 的工作原理,这并不奇怪。我建议阅读更多 examples 以了解如何正确使用它。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...