Python Pandas过滤; TypeError:无法将系列转换为<class'int'=“”>

时间:2018-01-05 20:10:59

标签: python python-3.x pandas dataframe

我的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)
  

'系列'对象没有属性'applymap'

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

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

无法将系列转换为类'int'

如何过滤Instrument == WTICO_USD并拥有Units < 0的所有行?

1 个答案:

答案 0 :(得分:1)

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

仅供参考Difference between map, applymap and apply methods in Pandas ,对applyapplymapmap之间的差异给出了很好的解释。您可能会注意到,根据方法applymap的定义,在一系列文章中将是荒谬的。