Если цикл и сохранение логических результатов - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть 3 разных файла CSV.Каждый имеет 70 строк и 430 столбцов.Я хочу создать и сохранить логический файл результатов (с той же формой), который имеет значение true, если условие выполнено.один файл содержит данные о температуре, один данные о ветре и один Rh data.condition: [(t> = 35) & (w> = 7) & (rh <30)] Я хочу, чтобы сохраненный файл был 0 и 1 файл, которыйпоказать, в какой ячейке было выполнено условие (1) или нет (0).Проблема в том, что результаты не соответствуют действительности!Я очень ценю вашу помощь. </p>

import numpy as np
import pandas as pd

dft = pd.read_csv ("D:/practicet.csv",header = None)
dfrh = pd.read_csv ("D:/practicerh.csv",header = None)
dfw = pd.read_csv ("D:/practicew.csv",header = None)

result_set = []

for i in range (0,dft.shape[1]):
    t=dft[i]
    w=dfw[i]
    rh=dfrh[i]
    result=np.empty(dft.shape,dtype=bool)   
    result=result[(t>=35) & (w>=7) & (rh<30)]
    result_set = np.append(result_set,result)
np.savetxt("D:/result.csv", result_set, delimiter = ",") 

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Дайте этому шанс.Для вас это проблема с прокси, со случайными массивами из [0,100] в той же форме, что и ваш CSV.

import numpy as np

dft = np.random.rand(70,430)*100.
dfrh = np.random.rand(70,430)*100.
dfw = np.random.rand(70,430)*100.

result_set = []

for i in range(dft.shape[0]):
    result = ((dft[i] >= 35) & (dfw[i] >= 7) & (dfrh[i] < 30))
    result_set.append(result)

np.savetxt("result.csv", result_set, delimiter = ",")

Критическая проблема с вашим кодом:

result=np.empty(dft.shape,dtype=bool)   
result=result[(t>=35) & (w>=7) & (rh<30)]

Этоне делает то, что вы думаете, что делает.Вы (i) инициализируете пустой массив (в котором будут значения мусора), а затем вы (ii) применяете к нему свою логическую маску.Итак, теперь у вас есть массив мусора, замаскированный в другой массив мусора в соответствии с указанными вами логическими правилами.

В качестве примера ...

In [5]: a = np.array([1,2,3,4,5])

In [6]: mask = np.array([True,False,False,False,True])

In [7]: a[mask]
Out[7]: array([1, 5])
0 голосов
/ 19 ноября 2018

Вы можете генерировать логические серии, проверяя каждый столбец кадра.Затем вы просто объединяете столбцы обратно в объект DataFrame.

import pandas as pd
data = pd.read_csv('data.csv')

bool_temp = data['temperature'] > 22
bool_week = data['week'] > 5
bool_humid = data['humidity'] > 50

data_tmp = [bool_humid, bool_temp, bool_week]
df = pd.concat(data_tmp, axis=1, keys=[s.name for s in data_tmp])

Фиктивные данные:

temperature,week,humidity
25,3,80
29,4,60
22,4,20
20,5,30
2,7,80
30,9,80

записываются в data.csv

...