[英]Code using to convert time is taking too long
我有一個 dataframe 如下(可重現的數據):
np.random.seed(365)
rows = 17000
data = np.random.uniform(20.25, 23.625, size=(rows, 1))
df = pd.DataFrame(data , columns=['Ta'])
'Set index'
Epoch_Start=1636757999
Epoch_End=1636844395
time = np.arange(Epoch_Start,Epoch_End,5)
df['Epoch']=pd.DataFrame(time)
df.reset_index(drop=True, inplace=True)
df=df.set_index('Epoch')
Epoch Ta
1636757999 23.427413
1636758004 22.415409
1636758009 22.560560
1636758014 22.236397
1636758019 22.085619
...
1636842974 21.342487
1636842979 20.863043
1636842984 22.582027
1636842989 20.756926
1636842994 21.255536
[17000 rows x 1 columns]
我預計 output 是: 1.- 日期從 Epochtime 轉換為 Datetime 的列(函數返回值中的列“日期”)。 (例:2021-11-12 22:59:59)
這是我使用的代碼:
def obt_dat(path):
df2=df
df2['date'] = df.index.values
df2['date'] = pd.to_datetime(df2['date'],unit='s')
df2['hour']=''
df2['fecha']=''
df2['dates']=''
start = time.time()
for i in range(0,len(df2)):
df2['hour'].iloc[i]=df2['date'].iloc[i].hour
df2['fecha'].iloc[i]=str(df2['date'].iloc[i].year)+str(df2['date'].iloc[i].month)+str(df2['date'].iloc[i].day)
df2['dates'] = df2['fecha'].astype(str) + df2['hour'].astype(str)
end = time.time()
T=round((end-start)/60,2)
print('Tiempo de Ejecución Total: ' + str(T) + ' minutos')
return(df2)
obt_dat(df)
之后我使用.groupby
從特定時間獲取平均值。 但是,問題是代碼需要很長時間才能執行。 誰能想到縮短 function obt_dat()
的運行時間
使用普通的 Python - 列表或字典而不是數據幀。
如果您確實需要 dataframe,請在 CPU 密集型操作結束時構建它。
但這只是我的假設——你可能想做一些基准測試來看看代碼的每個部分真正需要多少時間。 “很長”是相對的,但我很確定您的瓶頸是您在for
循環中執行的 dataframe 操作。
您可以使用dt
(日期訪問器)來消除循環:
df2 = df.copy()
df2['date'] = df.index.values
df2['date'] = pd.to_datetime(df2['date'], unit='s')
df2['hour'] = df2['date'].dt.hour
df2['fecha'] = df2['date'].dt.strftime('%Y%m%d')
df2['dates'] = df2['date'].dt.strftime('%Y%m%d%H')
使用您的可重現示例的時間給出:
156 ms ± 1.22 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.