当存在非数字值时如何运行数字查询?



我有一个熊猫数据帧,其中一列主要是数字,但也包含非数字值,如"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

最新更新