![](/img/trans.png)
[英]how to calculate row by row value till to every 60 minutes in same column using python
[英]How to write a code to display output value in every 60 minutes using panda python using csv file
我的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.