【问题标题】:Pandas sum() TypeError: only length-1 arrays can be converted to Python scalarsPandas sum() TypeError:只有长度为1的数组可以转换为Python标量
【发布时间】:2016-08-06 18:25:21
【问题描述】:

我有类似熊猫数据框的东西,叫做 gps

   a  b  label  importe
1  x  y    1     500.2
2  y  z    0     300.4
3  z  x    0     200.3
4  x  z    2     300.6
5  y  y    1     200.7

我想在一个数组上添加具有相同标签的“importe”的总和,所以:

print [gps.importe[gps.label == 0].sum(),gps.importe[gps.label == 1].sum(),gps.importe[gps.label == 2].sum()]

给我

[500.7, 700.9, 300.6]

我想要的,但是这样:

print [gps.importe[gps.label == i].sum() for i in range(3)]

给我

TypeError: only length-1 arrays can be converted to Python scalars

我实际上在 pandas 数据框上有更多的值和超过 3 个标签,这就是为什么我需要第二个选项来工作。

为什么会出现这个错误?我究竟做错了什么?有什么诀窍?

【问题讨论】:

  • 您的两个代码都应该可以工作(即使使用groupby 是一个更通用的解决方案)。您是否绝对确定您的第二个代码会产生您所说的错误(使用您提供的输入)?
  • 为我工作。您使用的是哪个版本的 Python 和 Pandas?
  • python 2.1.11,熊猫 0.17.1
  • 好吧,我发现我的错误,而不是 3 我有一个不是整数的变量的名称,更改了它,谢谢你告诉我它对你有用,我注意到它是唯一的区别

标签: python arrays pandas typeerror


【解决方案1】:

这就是你想要的吗?

In [191]: df.groupby('label').agg({'importe':'sum'})
Out[191]:
       importe
label
0        500.7
1        700.9
2        300.6

或:

In [192]: df.groupby('label')['importe'].sum()
Out[192]:
label
0    500.7
1    700.9
2    300.6
Name: importe, dtype: float64

【讨论】:

  • 它完成了这项工作,谢谢。我只看一种方式。
猜你喜欢
  • 2014-09-27
  • 2013-03-15
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
相关资源
最近更新 更多