如果循环并保存布尔结果

时间:2018-11-19 18:30:25

标签: python loops boolean conditional-statements

我有3个不同的CSV文件。每个都有70行和430列。我想创建并保存一个布尔结果文件(具有相同的形状),如果满足条件,则将其设为true。 一个文件包括温度数据,一个风力数据和一个Rh数据。条件是:[(t> = 35)&(w> = 7)&(rh <30)] 我希望保存的文件为0和1个文件,这些文件显示条件在哪个单元格中满足(1)或不满足(0)。问题是结果不正确!非常感谢您的帮助。

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 :(得分:1)

您可以通过测试框架的每一列来生成布尔序列。然后,您只需将列连接回一个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

答案 1 :(得分:1)

试一下。 对于您的代理服务器来说,这是一个代理问题,其中[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])