【问题标题】:If loop and saving the boolean results如果循环并保存布尔结果
【发布时间】:2019-04-22 04:03:04
【问题描述】:

我有 3 个不同的 CSV 文件。每个都有 70 行和 430 列。我想创建并保存一个布尔结果文件(具有相同的形状),如果满足条件,则该文件为真。 一个文件包括温度数据、一个风数据和一个Rh数据。条件是:[(t>=35) & (w>=7) & (rh

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 = ",") 

【问题讨论】:

  • 如果我理解正确,您的目标是最后有一个 0 和 1 的文件?还是每个输入文件一个输出文件?

标签: python loops boolean conditional-statements


【解决方案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])

【讨论】:

  • 非常感谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多