如何使用np.isnan从Python中的数组中删除带有nan的行?

如何使用np.isnan从Python中的数组中删除带有nan的行?,python,python-3.x,numpy,Python,Python 3.x,Numpy,这是我的代码: with open(r'filename.dat') as f: for line in itertools.islice(f, 19, None): line = line.strip() columns = line.split() lam = columns[0] lam1 = np.array(lam) flux = float(columns[1]) flux1 = np.array(flux) data = np

这是我的代码:

with open(r'filename.dat') as f:
for line in itertools.islice(f, 19, None):
    line = line.strip()
    columns = line.split()
    lam = columns[0]
    lam1 = np.array(lam)
    flux = float(columns[1])
    flux1 = np.array(flux)
    data = np.column_stack((lam1,flux1))
    data = data[~np.isnan(data).any(axis=1)]
    print(data)
我得到这个错误:


TypeError:输入类型不支持ufunc“isnan”,并且根据强制转换规则“安全”,无法将输入安全强制为任何受支持的类型。

您可以更轻松地使用numpy函数导入数据,然后使用简单的切片表示法操作删除NaN:

data = np.genfromtxt('filename.dat')
data = data[~np.isnan(data)]

这样,当您导入数据时,它将已经是一个
ndarray
,numpy操作将更容易应用。然后使用切片表示法选择非NaN
np.isnan()

示例输入和输出的行。。。您在这里所做的工作(在文件上循环、手动拆分、堆叠列等)与使用loadtxt或类似的方法相比,似乎需要大量的工作……基本上,我有一个.dat文件,其中包含一个标头,然后是波长和相应的通量值。一些通量值表示为“nan”(即低通量)。使用nan删除行的方法可能比我现在的方法简单得多。您是否尝试过使用
np.loadtxt
加载文件,并指定合适的
skiprows=
usecols=
并查看结果?类似于
data=np.loadtxt('filename.dat',usecols=[0,1],skiprows=19)
的东西成功了!现在data=data[~np.isnan(data).any(axis=1)]起作用。非常感谢。