我试图从数组中过滤出nan值。该数组是unique()
调用的结果,在DataFrame列上包含字符串和NA的混合。我找不到直接的方法来完成。
% sprints = frame['col'].unique()
% sprints
array([nan, 'Sprint 3.3', 'Sprint 2.3', ...], dtype=object)
现在我想过滤nan
我自然在努力:
sprints[~np.isnan(sprints)]
这会给我一个错误:
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
但即使我尝试用其他方法手工编写代码,也会遇到同样的错误:
sprints = frame['col'].unique().tolist()
[sprint for sprint in sprints if not np.isnan(sprint)]
...
same error
所以我采用了一种蛮力的方法:
def isna(val):
try:
return np.isnan(val)
except:
return False
sprints = frame['col'].unique().tolist()
[ sprint for sprint in sprints if not isna(sprint)]
...这是可行的,但感觉一定有更自然的方式,对吗?numpy.isnan()
中有一个casting
参数,但将其设置为'unsafe'
并不能解决问题。
2条答案
按热度按时间pinkon5k1#
方法是首先筛选DataFrame上的nas:
感谢@hpaulj的提示
5t7ly7z52#
对于多个1d-numpy数组,您可以使用以下命令实现与
dropna
类似的效果: