使用for和if更改特定数据使用Python

时间:2016-06-08 15:54:30

标签: python numpy

我的数据集有3列 - 经度,纬度和数据 - 以及64800行。

Lon         Lat        Data
-180.0      -90.0      0.0

-180.0      -89.0      1500.0

-180.0      -88.0      18.5

等...

我想编辑某些地理区域的数据列,例如当经度介于-30和70之间,纬度介于35和70之间时。

我尝试使用for循环和if语句(下面的代码),并在条件满足时执行操作。

for myline in infile:
    mylon = f[:,0]
    mylat = f[:,1]
    mydata = f[:,2]
    if (0 < myLon < 30) and (30 < myLat < 50):
        mydata = mydata*1.2

但后来出现了这个错误;

ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

我现在使用np.logical_and和.all()来处理数组,但现在当我使用'.all()'时,条件不会应用于数据。如果我尝试'.any()',则该操作仅应用于所有数据,而不仅仅是匹配其他两列中的条件。我没有收到任何错误。

任何有关我错过或建议的想法都将不胜感激! 谢谢。

以下完整代码。

import numpy as np

filepath = 'filepath'
filen = filepath+'infile'
f = np.loadtxt(filen,skiprows=1)

outfile = 'outfile'

for myline in infile:
    mylon = f[:,0]
    mylat = f[:,1]
    mydata = f[:,2]
    if (np.logical_and((-30<mylon),(mylon<70)).all()) and (np.logical_and((35<mylat),(mylat<70)).all()):
        mydata = mydata*1.2


np.savetxt(outfile,np.c_[mylon,mylat,mydata], fmt='%13.3f'*2+'%16.2f')   

1 个答案:

答案 0 :(得分:0)

试试这个:

f = np.array([[-180., -90., 0.], [-180., -89., 1500.], [-180., -88., 18.5]])

lon_rng = (-181 < f[:, 0]) & (f[:, 0] < -179)

lat_rng = (-90 < f[:, 1]) & (f[:, 1] < -88)

f[lat_rng & lon_rng, 2] = f[lat_rng & lon_rng, 2] * 1.2

f

array([[ -180. ,   -90. ,     0. ],
       [ -180. ,   -89. ,  1800. ],
       [ -180. ,   -88. ,    18.5]])