簡體   English   中英

如何使用csv文件使用熊貓python編寫代碼以每60分鍾顯示輸出值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM