【问题标题】:Mean function returning INF?平均函数返回 INF?
【发布时间】:2021-02-13 08:04:33
【问题描述】:

我在下面有一个df:

views | stats 
40       55
96       162
3         3
71        79

然后我使用下面的代码创建一个计算除法的新列

df['calc'] = (df['stats'] / df['views']).round(0)

这给了我

  views | stats  | calc
    40       55   1.0
    96       162  1.0
    3         3   1.0
    71        79  1.0
    11        22  2.0

当我在下面的 stats 列上运行 group by 时,它可以正常工作:

df.groupby(['day','group'])['stats'].mean().reset_index().sort_values(by=['day','stats'], ascending = False)

但是 - 当我从新的计算列中运行一组时:

df.groupby(['day','group'])['calc'].mean().reset_index().sort_values(by=['day','calc'], ascending = False)

day 和 group 是 df 中的其他列,它们是我想要分组的文本值

我的输出给了我一些 inf 值作为我不理解的统计数据的平均值。

我的列的数据类型是:

int64 用于视图和统计数据列和 计算列的 float64

我尝试通过以下操作将 calc 列转换为 int:

df['calc'] = df['calc'].apply(np.int64) 

但是得到一个错误提示:OverflowError: cannot convert float infinity to integer

我该如何解决这个问题,这样我就无法将 inf 作为 calc 列的平均值?

谢谢

【问题讨论】:

  • 与 day & group 分享一个 sn-p
  • 您的数据中可能有nan

标签: python python-3.x pandas data-science


【解决方案1】:

您的calc 列中似乎有np.inf-np.inf。您可以将此无穷大替换为 NaN 并将列转换为 Int64(注意大写 I):

df['calc'] = df['calc'].replace([np.inf, -np.inf], np.nan).astype('Int64')
print(df)

打印(例如):

   views  stats  calc
0     40     55     1
1      0    162  <NA>
2      3      3     1
3     71     79     1

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    相关资源
    最近更新 更多