我的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
的所有行?
答案 0 :(得分:1)
您可以使用DF.Units = DF.Units.map(int)
或DF.Units = DF.Units.astype(int)
。从那里你的过滤器应该工作。
仅供参考Difference between map, applymap and apply methods in Pandas
,对apply
,applymap
和map
之间的差异给出了很好的解释。您可能会注意到,根据方法applymap
的定义,在一系列文章中将是荒谬的。