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

No axis named Stats for object type DataFrame

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

No axis named Stats for object type DataFrame

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:

Objects passed to the function are Series objects whose index is either the DataFrame's index (axis=0) or the DataFrame's columns (axis=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 的实际操作,以了解如何正确使用它。