具有多个元素的数组的真值是不明确的。从列表列表中删除 nan
The truth value of an array with more than one element is ambiguous. Removing nan from list of lists
我需要从 python 列表中删除 nan
个值。问题是该列表可以包含一个元素的列表、两个元素的列表或 nan 值。例如:
import numpy as np
mylist = [[1,2],float('nan'),[8],[6],float('nan')]
print(mylist)
newlist = [x for x in mylist if not np.isnan(x)]
print(newlist)
不幸的是,在超过 1 个元素的列表上调用 np.isnan() 会出现错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
pandas.isnull
也一样
math.isnan()
另一方面给出:
TypeError: must be real number, not list
有解决这个问题的捷径吗?
问题是您无法测试列表中的 NaN 状态。你应该只测试浮点数。
为此你可以使用:
newlist = [x for x in mylist if not isinstance(x, float) or not np.isnan(x)]
或者:
newlist = [x for x in mylist if isinstance(x, list) or not np.isnan(x)]
由于 short-circuiting,只有当 x 是 一个浮点数(或者不是替代列表)时,np.isnan(x)
才会被评估,它赢了'触发错误。
输出:[[1, 2], [8], [6]]
我需要从 python 列表中删除 nan
个值。问题是该列表可以包含一个元素的列表、两个元素的列表或 nan 值。例如:
import numpy as np
mylist = [[1,2],float('nan'),[8],[6],float('nan')]
print(mylist)
newlist = [x for x in mylist if not np.isnan(x)]
print(newlist)
不幸的是,在超过 1 个元素的列表上调用 np.isnan() 会出现错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
pandas.isnull
math.isnan()
另一方面给出:
TypeError: must be real number, not list
有解决这个问题的捷径吗?
问题是您无法测试列表中的 NaN 状态。你应该只测试浮点数。
为此你可以使用:
newlist = [x for x in mylist if not isinstance(x, float) or not np.isnan(x)]
或者:
newlist = [x for x in mylist if isinstance(x, list) or not np.isnan(x)]
由于 short-circuiting,只有当 x 是 一个浮点数(或者不是替代列表)时,np.isnan(x)
才会被评估,它赢了'触发错误。
输出:[[1, 2], [8], [6]]