在2d数组Python中跳过INF值

时间:2015-07-27 16:04:56

标签: python arrays numpy

我目前正在使用包含大量“INF'”的数据集。那些搞砸我计算的价值观。我试图删除这些值,但我一直无法找到使用2D数组执行此操作的方法。我的一些代码如下:

def date2str(date_str):
    date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
    return date.toordinal()

def readfiles(file_list):
    data = []
    for fname in file_list:
        data.append(
                    np.loadtxt(fname,
                               usecols=(0,18),
                               comments='#',    # skip comment lines
                               delimiter='\t',
                               converters = { 0 : date2str },
                               dtype=None))
    return data

data = readfiles(['soundTransit1_remote_rawMeasurements_15m.txt'])
print data
data = data[np.isfinite(data)]
np.set_printoptions(threshold='nan')

column_0 = np.array(data)[0][:,0]
column_1 = np.array(data)[0][:,1]

thermTemp1_degC = 1/(1.401E-3 + 2.377E-4*np.log(column_1) + 9.730E-8*np.log(column_1)**3)-273.15

我已经阅读了两个列(一个包含数据,另一个包含相关的日期和时间)并将它们分开,以便我可以操作数据(在我的代码的最后一行)。我需要能够跳过包含' INF'的数据行。我当前的解决方案' data = data [np.isfinite(data)]无效。我收到错误' TypeError:只有一个元素的整数数组可以转换为索引'。谁能给我一些指导?

1 个答案:

答案 0 :(得分:1)

你的函数readfiles返回一个python列表,而不是一个numpy数组。 Python列表不能使用numpy的布尔数组之一进行索引,这就是为什么你得到data[np.isfinite(data)]的错误; data是一个python列表,但是np.isfinite(data)是一个布尔值的numpy数组。

readfiles返回一个numpy数组,类似

return np.array(data)

或在尝试使用numpy的布尔索引之前将结果转换为数组:

data = np.array(data)
data = data[np.isfinite(data)]

您可能需要按一下按钮才能获得具有所需形状的阵列。