python - 如何使用熊猫python使用csv文件编写代码以每60分钟显示一次输出值
问题描述
我在 csv 文件中有温度。我的文件随时间更新。我已将此数据加载到 pandas DataFrame。我想做的是预测接下来 60 分钟的温度值。
我将开始时间更改为 0 分钟。
将开始时间更改为 0 分钟后,我编写代码以每 60 分钟显示一次时间。
date time temp humidity wind
2018-10-03 06:00:00 0.0 63 0 0
2018-10-03 07:00:00 60.0 63 0 2
2018-10-03 08:00:00 120.0 104 11 0
2018-10-03 09:00:00 180.0 93 0 50
2018-10-03 10:00:00 240.0 177 0 2
2018-10-03 11:00:00 300.0 133 0 0
2018-10-03 12:00:00 360.0 70 0 0
2018-10-03 13:45:00 465.0 83 0 60
2018-10-03 15:00:00 540.0 127 0 50
2018-10-03 16:00:00 600.0 205 0 0
2018-10-03 17:00:00 660.0 298 0 0
2018-10-03 18:00:00 720.0 234 0 0
2018-10-03 19:00:00 780.0 148 0 20
2018-10-03 20:00:00 840.0 135 0 0
2018-10-03 21:30:00 930.0 100 0 50
2018-10-04 06:00:00 0.0 166 0 0
2018-10-04 07:00:00 60.0 0 0 0
之后,我编写了下一个输出温度值的代码。意味着我的第一个输出是 60 分钟时的 63(温度)。
time(t) temp humidity wind output(temp )(t+60)
0 63 0 0 63
60 63 0 2 104
像这样它应该运行。
我要做的是每 60 分钟显示一次输出(下一个温度值)值。输入将与 csv 文件一样添加。但输出应每 60 分钟显示一次。
我为此编写了代码。但它没有正确显示我的输出。谁能帮我解决这个问题。
我的代码:
import datetime
data = pd.read_csv('data6.csv' , sep=',')
print(data)
data['date'] = pd.to_datetime(data['date'] + " " + data['time'], format='%m/%d/%Y %H:%M:%S')
lastday = data.loc[0, 'date']
def convert_time(x):
global lastday
if x.date() == lastday.date():
tm = x - lastday
return tm.total_seconds()/60
else:
lastday = x
return 0
data['time'] = data['date'].apply(convert_time)
data.set_index('date', inplace=True)
data = data.values
X = 1
n_out = 1
x,y=list(),list()
start =0
for _ in range(len(data)):
in_end = start+X
out_end= in_end + n_out
if out_end < len(data):
x_input = data[start:in_end]
x.append(x_input)
while y.append(data[in_end:out_end,1]):
if data['time'] <= 60:
print(y)
data['time']+=1
start +=1
x = np.asanyarray(x)
y = np.asanyarray(y)
我的输出:
[[ 63.][104.][ 93.][177.][133.][ 70.][ 83.][127.][205.][298.][234.][148.[135.][100.][166.]]
但是问题来了
12:00:00 之后,我测量了 13:45 的值。因此,在 12:00:00 之后,我的输出将根据 13:45(平均 465 分钟)的值显示。但是我想每 60 分钟获得一次输出,如果当时没有值,我想在那个时候把它设为 0。
我想为输出写的是
time temp humidity wind
360 70 0 0
420 0 0 0
480 0 0 0
应该像这样添加输入
time temp humidity wind
0 min 63 0 0
0-60 min 63 0 2
:
:
然后在这里
12:00:00 ; 13:00:00
输入:
time (360:420 min ) 70 0 0
time (420:480 min) 83 0 0
这是我正在尝试做的方法。但根据我的代码,它并没有很好地实现。
谁能帮我解决这个问题?
csv 文件: 我的 csv 文件。
使用重采样方法,输出:
然后输出:
重采样后的输出:
解决方案
考虑以下方法:
import pandas as pd
# 1.txt contains data from the question with comma as a separator
df = pd.read_csv('1.txt', parse_dates=[0])
# add column with date only
df['day'] = df['date'].dt.date
# main processing flow applied to every date
def f(a):
# temperature
b = a['temp']
# date & time
b.index = a['date']
# resampling with 5 min step
c = b.resample('5T').apply(lambda x: x[0] if x.count() > 0 else None)
# linear interpolation
d = c.interpolate('linear')
# resampling with 1 hour step
e = d.resample('1H').apply(lambda x: x[0])
return e
# group by date and apply f() to every group, dfg is a pandas series
dfg = df.groupby('day').apply(lambda x: f(x)).droplevel(0)
dfg
是:
date
2018-10-03 06:00:00 63.000000
2018-10-03 07:00:00 63.000000
2018-10-03 08:00:00 104.000000
2018-10-03 09:00:00 93.000000
2018-10-03 10:00:00 177.000000
2018-10-03 11:00:00 133.000000
2018-10-03 12:00:00 70.000000
2018-10-03 13:00:00 77.428571
2018-10-03 14:00:00 91.800000
2018-10-03 15:00:00 127.000000
2018-10-03 16:00:00 205.000000
2018-10-03 17:00:00 298.000000
2018-10-03 18:00:00 234.000000
2018-10-03 19:00:00 148.000000
2018-10-03 20:00:00 135.000000
2018-10-03 21:00:00 111.666667
2018-10-04 06:00:00 166.000000
2018-10-04 07:00:00 0.000000
Name: temp, dtype: float64
推荐阅读
- c - 带有条件操作函数的无限while循环问题
- python - 我正在尝试标记数据并遇到语法错误,但我不明白它在哪里
- git - Git 子模块突然不再被识别为有效的 repo,.git/modules/[submodule] 中的一些文件丢失
- pandas - 检查是否在另一列中找到了一次列中的字符串之一
- reactjs - 如何处理对 NextJS 应用程序的表单 POST 操作?
- angular - Angular:自定义表单组件不会对值变化做出反应——比如 2 路数据绑定
- gis - 将代理从一个点移动到数据库中定义的另一个点
- javascript - 在After Effects中自动缩放文本框
- java - hibernate jpa 元模型生成器:“文件管理器问题:尝试为类型重新创建文件”
- logging - Loki Distributed with S3 backend - 时间戳和 Grafana 连接问题