我有一个熊猫数据帧,其中一列主要是数字,但也包含非数字值,如"None"。我想运行一个查询,该查询仅返回大于某些已售出的数值。但是,当我运行这个时:
df = df.query('num >= 100')
我收到一个错误:
TypeError: '>=' not supported between instances of 'str' and 'int'
如何正确运行此查询?
您可以使用apply
来执行此操作。df['num'].apply(f)
将返回一个熊猫布尔系列,说明列"num"的每个值是否是一个数字并且大于100。
def f(n):
try:
return n >= 100
except:
return False
df = df[df['num'].apply(f)]
您可以尝试转换为数字,然后进行过滤。但是,这也会将字符串'200'
转换为数字200
,从而在结果中包含此行(不确定这是否是您想要的(:
df = pd.DataFrame({'num': ['-', 1, 1000, None, '200']})
df[pd.to_numeric(df.num,'coerce').gt(100)]
结果:
num
2 1000
4 200