Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在numpy中,删除列中的条目无法转换为浮点的行_Python_Arrays_Numpy - Fatal编程技术网

Python 在numpy中,删除列中的条目无法转换为浮点的行

Python 在numpy中,删除列中的条目无法转换为浮点的行,python,arrays,numpy,Python,Arrays,Numpy,我在numpy中有一个数组,在检查它的过程中,我意识到一个特定列中的一些值包含乱七八糟的字符串 例如,可疑列是第二列,其外观如下: ['Joe', '200.00'] ['Fred', 'adfdfddfds'] ['Zhu', '5000.00'] ['text_ok_here', '10.10'] (请注意,dtype是字符串) 我最终希望: ['Joe', '200.00'] ['Zhu', '5000.00'] ['text_ok_here', '10.10'] 我需要删除在我的特定

我在numpy中有一个数组,在检查它的过程中,我意识到一个特定列中的一些值包含乱七八糟的字符串

例如,可疑列是第二列,其外观如下:

['Joe', '200.00']
['Fred', 'adfdfddfds']
['Zhu', '5000.00']
['text_ok_here', '10.10']
(请注意,
dtype
是字符串)

我最终希望:

['Joe', '200.00']
['Zhu', '5000.00']
['text_ok_here', '10.10']
我需要删除在我的特定列中挂起的、包含无法转换为float的字符串的任何整行

最初,我想我可以迭代该列,收集与不符合条件的条目匹配的索引,然后使用它来子集我的原始数组

大致如下:

for entry in my particular column:
    if <entry is a string, not a float>
        <delete that whole row of the matrix>
对于我的特定列中的条目:
如果
但这行不通,因为不管怎么说,一切都是一个字符串

我一直在处理转换类型的问题,但我没有直接的方法来测试这种胡言乱语。此外,即使我找到了正确的索引,我也不确定如何进行子集设置

我觉得这是非常常见的事情——清理数组,但要完成这项工作却非常困难


任何建议/理念等都将不胜感激。

了解数据的
dtype
非常重要,但如果数据是
float
int
或任何类似
dtype
s的数字,
boolean
索引就足够了

数据文件:

<temp.txt>
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 bad
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 bad
1 2 3 4 5 6
1 2 3 4 5 6
编辑 如果
数组
已经在
字符串
中,这可能是最简单的:

In [40]:

%%file temp.txt
1000.00 200.00
4000.00 adfdfddfds
20.00 5000
text_ok_here 5000
Overwriting temp.txt
In [53]:

A=np.genfromtxt('temp.txt', dtype=str)
B=np.genfromtxt('temp.txt')
In [55]:

A[np.isfinite(B[:,1])]
Out[55]:
array([['1000.00', '200.00'],
       ['20.00', '5000'],
       ['text_ok_here', '5000']], 
      dtype='|S12')

基本上将数据读入
A
作为
字符串的
数组
;将
B
转换为
float
NAN
中无法转换为有效数字的位置,然后根据
B

获取
a
的一部分。遍历检查您的条件的行的数字索引。如果不满足条件,请将索引添加到包含要保留的行索引的列表
keep
。然后,您可以使用list
keep
对数组进行切片,以获得仅包含不满足消除条件的行的数组。要使用列表对数组
a
进行切片
keep
,请执行
a[keep]
。如果要覆盖原始数组,请执行
a=a[keep]
。下面是一个示例,它在切片之前打印数组、要保留的索引列表以及切片之后的数组

#!/usr/bin/env python

import numpy

a = numpy.array([['foo', 2, 3], [4, 5, None], [7, 8, 'bar'], [10, None, 12]])
print(a)
keep = []
j = 2
for i in range(0, a.shape[0]) :
    if not(a[i, j] is None or isinstance(a[i, j], basestring)) :
        keep.append(i)
print keep
a2 = a[keep]
print(a2)

朱CT,我有一个字符串数组。但如果是这样,
如果
,对每个单元格来说不是都是
真的吗?因为单元格位于
str
?在这种情况下,胡言乱语的标准是什么?你完全正确。甚至我的伪代码也不起作用!!要测试一个细胞是否胡言乱语?除了眼球测试之外马克:这是一个极好的答案。我很遗憾地说,我已经编辑了我的问题,因为我对我面临的问题越来越熟悉,而你的优秀解决方案并不适用。对不起,不用担心。祝你申请好运!但是,
“text\u ok\u here”
不能转换为
数字,是否也应该将其删除?它只是第二列,包含我们不想要的值。第一列必须保持不变。
#!/usr/bin/env python

import numpy

a = numpy.array([['foo', 2, 3], [4, 5, None], [7, 8, 'bar'], [10, None, 12]])
print(a)
keep = []
j = 2
for i in range(0, a.shape[0]) :
    if not(a[i, j] is None or isinstance(a[i, j], basestring)) :
        keep.append(i)
print keep
a2 = a[keep]
print(a2)