【问题标题】:Python Pandas filtering; TypeError: cannot convert the series to <class 'int'>Python Pandas 过滤; TypeError:无法将系列转换为 <class 'int'>
【发布时间】:2018-01-05 20:10:59
【问题描述】:

我有一个如下所示的 DataFrame:

ID  Instrument  Units   Price   Status
165  WTICO_USD     -1   60.264  OPEN
169  WTICO_USD     -1   60.274  OPEN
173  WTICO_USD      1   54.284  OPEN
185  BCO_USD        1   60.124  OPEN

如果我写以下内容,我会得到我所期望的:

DF[(DF.Instrument=='WTICO_USD')]

与此相同:

DF[(DF.Instrument=='WTICO_USD')&(DF.ID==165)]

但是,如果我尝试进一步过滤,就像这样,我没有得到任何行:

DF[(DF.Instrument=='WTICO_USD')&(DF['Units']==-1)]

相同
DF[(DF.Instrument=='WTICO_USD')&(DF.Units=='-1')]

但是,这会产生错误:

DF[(DF.Instrument=='WTICO_USD')&(DF['Units']>-1)]

TypeError:无法将系列转换为“int”类

所以,我试试这个并得到另一个错误:

DF.Units.applymap(int)

'Series' 对象没有属性'applymap'

因此,由于我选择了单位列中的所有值,因此我得到了一个无法转换的系列。但是为什么我在尝试这个的时候也会这样呢?

DF[(DF.Instrument=='WTICO_USD')&(int(DF['Units'])>-1)]

无法将系列转换为“int”类

如何过滤所有Instrument == WTICO_USD 并具有Units &lt; 0 的行?

【问题讨论】:

  • 不,这些是作为单独的命令输入的,因此,第一个不应影响第二个。

标签: python python-3.x pandas dataframe


【解决方案1】:

您可以使用DF.Units = DF.Units.map(int)DF.Units = DF.Units.astype(int)。从那里你的过滤器应该工作。

仅供参考Difference between map, applymap and apply methods in Pandas ,很好地解释了applyapplymapmap之间的区别。您可能会注意到,在方法 applymap 的定义下,在系列上将是荒谬的。

【讨论】:

  • 您必须将调用的输出分配给astypeDF.Units,否则值不变。
猜你喜欢
  • 2021-09-24
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多