【问题标题】:Python(Numpy)- df apply error - IndexError: tuple index out of rangePython(Numpy)- df 应用错误-IndexError:元组索引超出范围
【发布时间】:2016-12-14 23:14:52
【问题描述】:
from pandas import DataFrame,Series
import numpy

def avg_bronze_medal():
    countries=['Russian Fed','Norway','Canada']
    gold=[13,11,10]
    silver=[11,5,10]
    bronze=[9,10,5]
    medal_counts={'country_name':Series(countries),'gold':Series(gold),'silver':Series(silver),'bronze':Series(bronze)}
    df=DataFrame(medal_counts)
    print df
    print df['gold'].apply(numpy.mean, axis=1)

最后一行给出的错误是“IndexError: tuple index out of range”。我需要在数据框中使用应用函数,它应该获得金、铜和银列的平均值。在上面的例子中,我只使用了金柱。请帮我修复错误。

【问题讨论】:

  • df['gold'].mean()
  • 试试这个:df.drop(['country_name'],1).mean()
  • 或者,删除axis kwag,或者将其设置为 0...
  • @Kartik,你是对的 - 计算每个国家的平均(金牌、银牌、铜牌)奖牌数量是没有意义的......
  • 是的,我就是这么想的。但是,我删除了我的评论,因为谁知道为什么 OP 需要我们觉得奇怪的计算...

标签: python pandas numpy data-science


【解决方案1】:

同时获取所有三列的平均值:

df[['gold', 'bronze', 'silver']].mean(axis=1)

但这让我很困惑,为什么你需要在锦标赛中获得的平均奖牌......但我想你出于某种原因需要它!


OP 应注意的一些额外注意事项:

.apply 是一种适用于行或列的方法(默认)。如果您调用df.apply(func) 函数,func 将应用于所有列,一次一列。 df.apply(func, axis=1)func 应用于所有行,一次一个。对于pd.Series,由于只有一列,.apply 始终适用于行。如果您需要将 complex custom function 应用于行或列,.apply 将很有用。一些统计量度,例如总和、均值、标准差,是common 并且具有它们自己的矢量化函数。因此,可以直接调用它们,就像上面的答案一样。

请阅读以上段落中链接的文档以获取更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多