我有一个列表列表,我需要删除所有行,然后删除值大于某个变量的列。 我无法找到自己如何做到这一点。 我所能做的就是:
rowNum =0
for row in self.Table:
rowIsValid = False
for value in row:
if not value is None and (value > 0.35 and not value == 1):
rowIsValid = True
if not rowIsValid:
self.Table = numpy.delete(self.Table, (rowNum), axis=0)
#self.Table.pop(row)
rowNum+=1
我只是为了行。它不起作用( 如何删除列 - 我甚至无法想象。
数据示例 输入:
1.0 None 0.333 0.166 None
0.4 1.0 0.541 0.4 0.3
0.1 0.41 1.0 0.23 0.11
输出(例如我需要删除所有值小于0.3而不是(1不包含在计算中)的行和列)
0.4 1.0 0.541 0.4
0.1 0.41 1.0 0.23
答案 0 :(得分:0)
如果您的数组看起来像这样:
>>> arr = array([[ 1. , nan, 0.333, 0.166, nan],
[ 0.4 , 1. , 0.541, 0.4 , 0.3 ],
[ 0.1 , 0.41 , 1. , 0.23 , 0.11 ]])
然后首先将所有nan
值设置为True
,因为它们不符合标准。
>>> arr[np.isnan(arr)] = True
现在获取一组布尔值,其中True
表示符合我们条件的项目,现在如果行或列中的所有项目都是True
,那么我们应该忽略该行或列:
>>> temp = (arr == 1.0) | (arr < 0.35)
>>> temp
array([[ True, True, True, True, True],
[False, True, False, False, True],
[ True, False, True, True, True]], dtype=bool)
仅获取包含至少一个False
的行:
>>> rows = ~np.all(temp, axis=1)
>>> rows
array([False, True, True], dtype=bool)
与行相同,但在不同的轴上:
>>> cols = ~np.all(temp, axis=0)
>>> cols
array([ True, True, True, True, False], dtype=bool)
现在使用简单的索引和切片来获取所需的项目:
>>> arr[rows][:, cols]
array([[ 0.4 , 1. , 0.541, 0.4 ],
[ 0.1 , 0.41 , 1. , 0.23 ]])