【发布时间】:2016-12-24 16:07:41
【问题描述】:
我有一个如下所示的日志文件:(日期/时间 - 温度 - 湿度)
2016-05-17 21:17 18.5 39.2
2016-05-17 21:18 18.5 39.2
2016-05-17 21:19 18.6 39.3
2016-05-17 21:20 18.5 39.3
2016-05-17 21:21 18.5 39.3
2016-05-17 21:22 18.4 39.2
2016-05-17 21:23 18.5 39.3
2016-05-17 21:24 18.4 39.3
2016-05-17 21:25 18.5 39.4
2016-05-17 21:26 18.4 39.3
2016-05-17 21:27 18.3 39.4
2016-05-17 21:28 18.3 39.4
2016-05-17 21:29 18.4 39.5
2016-05-17 21:30 4.4 39.5
2016-05-17 21:31 18.4 39.5
2016-05-17 21:32 18.3 39.5
2016-05-17 21:33 18.3 39.5
2016-05-17 21:34 18.3 39.5
2016-05-17 21:35 18.3 39.5
2016-05-17 21:36 18.3 39.6
2016-05-17 21:37 18.3 39.6
2016-05-17 21:38 18.3 39.6
2016-05-17 21:39 18.3 39.6
2016-05-17 21:40 18.3 15.6
2016-05-17 21:41 18.2 39.5
我想消除显示异常峰值和低点(错误测量值)的行。
我的做法:
计算每小时的平均温度和湿度值,然后将这一小时内的每个值与平均值进行比较。如果温度或湿度与平均值相差甚远,则整行都会被踢。
我可以用熊猫做这个吗?
到目前为止,我只设置了 df。
df = pd.read_csv('Logger.csv',delimiter="\t", names =['Timestamp', 'Temperature',
'Humidity'],header=None, parse_dates=["Timestamp"], index_col="Timestamp").resample('H')
.mean().dropna()
所以我得到了每小时的平均值。
问题:我可以使用 pandas 来比较每行的每个 Temp 和 Hum 值,并消除那些与计算平均值相差 5°C 或 5% 的值吗?
编辑:所以我从日志文件中发布了更多信息,并在 21:30 和 21:40 “添加”了 2 个测量错误。这些测量误差每天发生一到两次,这些是我想要消除的行。 数据通过 Raspberry Pi 和 DHT22 传感器 24/7 全天候记录(传感器存在导致错误测量的错误)
不太确定我是否理解您的问题。我想将好的数据写入一个新的 .csv 文件(good data.csv),将坏数据写入一个不同的新 .csv 文件(baddata.csv) 对不起,如果我把你的问题弄错了。
我想计算日志文件中每 60 分钟的平均值,然后将值逐行与相应小时的平均值进行比较。 对于顶级熊猫给我的日志示例:
Temperature Humidity
Timestamp
2016-05-17 21:00:00 17.82 38.464
所以我清理日志的想法是将日期 2016-05-17 和 21:00 - 22:00 小时内的每个温度值与 17.82°C 进行比较。 我想对湿度做同样的事情。
而这整个过程每一天每一小时都在日志文件中。
如果我没有说得足够清楚,我很抱歉。
@Kyle:我想我可以稍微调整一下这种差异。也许 5°C 有点窄,但我认为 10°C 可以完成这项工作,也许 10% 湿度。 日志是在一个封闭的车库中拍摄的,我认为帽子应该可以工作。测量误差我想摆脱常规测量值的相当大的豁免。 @MaxU: 所以我尝试了代码,但它没有用,我用它来理解语法,这就是我最终得到的:
logfile =pd.read_csv('/Users/Peter/Desktop/LearnPython/DataLoggerTEST.csv',header=None, delimiter="\t",names['Timestamp','Temperature','Humidity'],index_col=0,parse_dates='Timestamp')
df=[logfile[['Temperature','Humidity']].groupby(pd.TimeGrouper('1H')).transform('mean').abs().query('Temperature > 5 and Humidity > 5').index]
我得到的只是每小时的mean 值
输出是(提取):
Date/Time
2016-05-17 21:17:00 17.82 38.464
2016-05-17 21:18:00 17.82 38.464
2016-05-17 21:19:00 17.82 38.464
2016-05-17 21:20:00 17.82 38.464
2016-05-17 21:21:00 17.82 38.464
2016-05-17 21:22:00 17.82 38.464
2016-05-17 21:23:00 17.82 38.464
2016-05-17 21:24:00 17.82 38.464
2016-05-17 21:25:00 17.82 38.464
2016-05-17 21:26:00 17.82 38.464
2016-05-17 21:27:00 17.82 38.464
似乎我应该得到mean 值和实际值之间绝对差异的部分不起作用
【问题讨论】:
-
你能发布更大的样本 DF 和所需的 DF 吗?是要过滤原始DF还是重采样后?
-
eliminate those values that are 5°C or 5% off the calculated mean- 你的意思是整个 DF 的全局mean吗? -
您需要确定可接受的方差,如果记录超出可接受的方差,您可以将其写入不良数据
标签: python-3.x pandas logging