Python Numpy-为什么在尝试删除行时出现NaN值错误
我有一个numpy阵列:Python Numpy-为什么在尝试删除行时出现NaN值错误,python,arrays,numpy,Python,Arrays,Numpy,我有一个numpy阵列: A = array([['id1', '1', '2', 'NaN'], ['id2', '2', '0', 'NaN']]) 我还有一份清单: li = ['id1', 'id3', 'id6'] 我希望遍历数组和列表,如果数组每行中的第一个元素不在列表中,则从数组中删除整行 我的代码到目前为止: from numpy import * for row in A: if row[0] not in li: delet
A = array([['id1', '1', '2', 'NaN'],
['id2', '2', '0', 'NaN']])
我还有一份清单:
li = ['id1', 'id3', 'id6']
我希望遍历数组和列表,如果数组每行中的第一个元素不在列表中,则从数组中删除整行
我的代码到目前为止:
from numpy import *
for row in A:
if row[0] not in li:
delete(A, row, axis = 0)
这将返回以下错误:
ValueError: invalid literal for int() with base 10: 'NaN'
每行中所有元素的类型都是str(),因此我不理解错误中提到的int()
有什么建议吗
谢谢,
S;-) 仅仅生成一个新数组是没有选择的
numpy.array([x for x in A if x[0] in li])
看起来您想就地删除数组中的一行,但是,使用
np.delete
函数是不可能的,因为这样的操作违背了Python和Numpy管理内存的方式
我在Numpy邮件列表()上发现了一篇有趣的帖子,其中首先讨论了np.delete
函数:
因此,“就地”删除数组
对象不会特别重要
有用,因为它只适用于
无附加引用的数组
计数(即简单b=a赋值
将增加引用计数和
使之无法说出dela[obj])
但是,这两个问题
方法是一旦你开始
删除任意行(或n-1)
数组中的维度子空间)
你很可能再也没有机会了
可以描述的内存块
使用n维阵列存储器
模型
如果您查看np.delete
()的文档,我们可以看到函数返回一个new数组,其中删除了所需的部分(不一定是行)
所以,在你的情况下,我想你会想做一些事情,比如:
A = array([['id1', '1', '2', 'NaN'],
['id2', '2', '0', 'NaN']])
li = ['id1', 'id3', 'id6']
for i, row in enumerate(A):
if row[0] not in li:
A = np.delete(A, i, axis=0)
A
现在可以按照您的需要进行缩减,但请记住这是一段新的内存。每次np.delete
都被称为新内存,其名称A
将指向新内存
我确信有一种更好的矢量化方法(可能使用掩码数组?)来找出要删除的行,但我无法将其组合在一起。如果有人有,尽管请评论 是的,比我的解决方案简单得多!我认为原始海报想要保留
行[0]
在li
中的行,需要从列表中删除而不是。
A = array([['id1', '1', '2', 'NaN'],
['id2', '2', '0', 'NaN']])
li = ['id1', 'id3', 'id6']
for i, row in enumerate(A):
if row[0] not in li:
A = np.delete(A, i, axis=0)