Поиск и сопоставление данных из двух файлов в Python - PullRequest
0 голосов
/ 04 мая 2018

У меня есть два разных файла; Справочный файл и наборы данных различной длины.

A reference file ("location.dat") contains:
40505   5.0666667   102.2166667
40517   5.6833333   101.8500000
40586   5.7666667   102.2000000
40587   5.8166667   102.0500000
40663   6.0333333   102.1166667
41525   5.5500000   100.4833333
41529   5.3500000   100.4000000 
...............
...............

A data sets ("input.dat") contains:
40517   2014    12  18  0   17.4
40586   2014    12  18  0   9.9
40587   2014    12  18  0   15.5
40663   2014    12  18  0   30.9
41525   2014    12  18  0   0
41529   2014    12  18  0   0
41540   2014    12  18  0   0
41543   2014    12  18  0   0
41548   2014    12  18  0   0
41549   2014    12  18  0   0
41551   2014    12  18  0   0
41610   2014    12  18  0   0

Вопрос: Как искать и сопоставлять набор данных, чтобы выходной файл объединял определенные выбранные значения из обоих файлов, например:

output.dat
40517   5.6833333   101.8500000 17.4
40586   5.7666667   102.2000000 9.9
40587   5.8166667   102.0500000 15.5
............
...........

The current script is:

data1=np.loadtxt('location.dat')
   lats1=data1[:,1]
   lons1=data1[:,2]
   code1=data1[:,0]

    data2=np.loadtxt('input.dat')
    rain=data2[:,5]
    code2=data2[:,0]

    ind=[]
    for i in range(len(data1)):
       dist=code1[i]
       ind.append(np.where(dist==np.int(dist))[0][0])
       rain2=rain[ind]

    data3=np.array([code1,lats1,lons1,rain2])
    data3=np.transpose(data3)
    np.savetxt('output.dat',data3,fmt='%9.3f')

Текущий результат

40517.000     5.683   101.850     0.000
40586.000     5.767   102.200     0.000
40587.000     5.817   102.050     0.000
40663.000     6.033   102.117     0.000
41525.000     5.550   100.483     0.000
41529.000     5.350   100.400     0.000
41540.000     5.383   100.550     0.000

Значения rain2 не были правильно добавлены из входного файла. Как преобразовать вывод первого столбца в целое число? Любые идеи о том, что пошло не так? TQ

1 Ответ

0 голосов
/ 04 мая 2018

Линия

ind.append(np.where(dist==np.int(dist))[0][0])

не имеет смысла в вашем коде. Это всегда будет добавлять 0, если dist является целым числом (так как dist==np.int(dist) это просто массив [True])

Лучший способ решить вашу проблему - создать справочную таблицу из данных в location.dat

data1=np.loadtxt('location.dat')
lookup = {int(round(id_)):(lat,long) for id_, lat, long in data1}

Обратите внимание, что лучший способ преобразовать число с плавающей точкой в ​​int в python - это использовать int(round(i))

Затем вы можете перебрать данные в другом файле и создать правильную строку

data3 = []
for line in data2:
    ind = int(round(line[0]))
    data3.append([ind, lookup[ind][0], lookup[ind][1], line[5]])

Чтобы сохранить данные, вы можете отформатировать и написать строку одну за другой или использовать savetxt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...