问题描述
我正在尝试为 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 以了解如何正确使用它。