2017-07-31 73 views
2

我正在查看是否有辦法選擇衣櫃時間到某個小時。我有以下幾點。該文件包含10年的數據,我已經縮小到一些我想保留的時間系列。在python熊貓中選擇最近的時間到特定的小時

import pandas as pd 
from pandas import DataFrame 
import matplotlib.pyplot as plt 
from matplotlib.pyplot import * 
import datetime 
import numpy as np 

dateparse = lambda x: pd.datetime.strptime(x, "%d:%m:%Y %H:%M:%S") 
aeronet = pd.read_csv('somefile', skiprows = 4, na_values = ['N/A'], parse_dates={'times':[0,1]}, date_parser=dateparse) 
aeronet = aeronet.set_index('times') 
del aeronet['Julian_Day'] 

aeronet.between_time('06:00:00', '07:00:00'), aeronet.between_time('12:00:00', '13:00:00') 

我已經選擇了這樣的片段。有沒有這樣的方法來選擇最接近06或12的時間,它的內容和丟棄/忽略來自熊貓系列的其餘內容,併爲整個文件做到這一點?

times    AOT_1640 AOT_1020 AOT_870 AOT_675 AOT_667 AOT_555 ... 
2000-08-07 06:49:10  NaN 0.380411 0.406041 0.445789  NaN  NaN 
2000-08-07 06:57:36  NaN 0.353378 0.377769 0.420168  NaN  NaN 
2000-08-08 06:31:00  NaN 0.322402 0.338164 0.364679  NaN  NaN 
2000-08-08 06:33:28  NaN 0.337819 0.353995 0.381201  NaN  NaN 
2000-08-08 06:36:26  NaN 0.347656 0.361839 0.390342  NaN  NaN 
2000-08-08 06:51:50  NaN 0.306449 0.325672 0.351885  NaN  NaN 
2000-08-08 06:54:23  NaN 0.336512 0.355386 0.380230  NaN  NaN 
2000-08-08 06:57:20  NaN 0.330028 0.345679 0.373780  NaN  NaN 
2000-08-09 06:34:56  NaN 0.290533 0.306911 0.336597  NaN  NaN 
2000-08-09 06:41:53  NaN 0.294413 0.311553 0.343473  NaN  NaN 
2000-08-09 06:49:45  NaN 0.311042 0.332054 0.360999  NaN  NaN 
2000-08-09 06:52:15  NaN 0.319396 0.339932 0.369617  NaN  NaN 
2000-08-09 06:55:20  NaN 0.327440 0.349084 0.378345  NaN  NaN 
2000-08-09 06:58:23  NaN 0.323247 0.345273 0.373879  NaN  NaN 
2000-08-12 06:30:01  NaN 0.465173 0.471528 0.483079  NaN  NaN 
2000-08-12 06:33:05  NaN 0.460013 0.465674 0.479500  NaN  NaN 
2000-08-12 06:35:59  NaN 0.433161 0.438488 0.453779  NaN  NaN 
2000-08-12 06:42:12  NaN 0.406479 0.415580 0.432160  NaN  NaN 
2000-08-12 06:50:06  NaN 0.414227 0.424330 0.439448  NaN  NaN 
2000-08-12 06:57:21  NaN 0.396034 0.404258 0.423866  NaN  NaN 
2000-08-12 06:59:47  NaN 0.372097 0.380798 0.401600  NaN  NaN 
[6200 rows x 42 columns] 

... 

times    AOT_1640 AOT_1020 AOT_870 AOT_675 AOT_667 AOT_555 ... 
2000-01-01 12:23:54  NaN 0.513307 0.557325 0.653497  NaN  NaN 
2000-01-03 12:24:49  NaN 0.439142 0.494118 0.593997  NaN  NaN 
2000-01-03 12:39:49  NaN 0.429130 0.477874 0.577334  NaN  NaN 
2000-01-03 12:54:48  NaN 0.437720 0.489006 0.586224  NaN  NaN 
2000-01-04 12:10:30  NaN 0.325203 0.362335 0.426348  NaN  NaN 
2000-01-04 12:25:15  NaN 0.323978 0.356274 0.423620  NaN  NaN 
2000-01-04 12:40:15  NaN 0.325356 0.361138 0.427271  NaN  NaN 
2000-01-04 12:55:14  NaN 0.326595 0.363519 0.431527  NaN  NaN 
2000-01-06 12:11:08  NaN 0.282777 0.307676 0.369811  NaN  NaN 
2000-01-06 12:26:09  NaN 0.285853 0.314178 0.374832  NaN  NaN 
2000-01-06 12:41:08  NaN 0.258836 0.289263 0.346880  NaN  NaN 
2000-01-08 12:12:04  NaN 0.165473 0.185018 0.235770  NaN  NaN 
2000-01-08 12:42:01  NaN 0.143540 0.164647 0.216335  NaN  NaN 
2000-01-08 12:57:01  NaN 0.142760 0.164886 0.215461  NaN  NaN 
2000-01-10 12:12:52  NaN 0.192453 0.225909 0.310540  NaN  NaN 
2000-01-10 12:27:53  NaN 0.202532 0.238400 0.322692  NaN  NaN 
2000-01-10 12:42:52  NaN 0.199996 0.235561 0.320756  NaN  NaN 
2000-01-10 12:57:52  NaN 0.208046 0.245054 0.331214  NaN  NaN 
2000-01-11 12:13:19  NaN 0.588879 0.646470 0.750459  NaN  NaN 
2000-01-11 12:28:17  NaN 0.621813 0.680442 0.788457  NaN  NaN 
2000-01-11 12:43:17  NaN 0.626547 0.685880 0.790631  NaN  NaN 
2000-01-11 12:58:16  NaN 0.631142 0.689125 0.796060  NaN  NaN 
2000-01-12 12:28:42  NaN 0.535105 0.584593 0.688904  NaN  NaN 
2000-01-12 12:43:41  NaN 0.518697 0.571025 0.676406  NaN  NaN 
2000-01-12 12:58:40  NaN 0.528318 0.583229 0.687795  NaN  NaN 
2000-01-13 12:14:20  NaN 0.382645 0.419463 0.496089  NaN  NaN 
2000-01-13 12:29:05  NaN 0.376186 0.414921 0.491920  NaN  NaN 
2000-01-13 12:44:05  NaN 0.387845 0.424576 0.501968  NaN  NaN 
2000-01-13 12:59:04  NaN 0.386237 0.423254 0.503163  NaN  NaN 
2000-01-14 12:14:43  NaN 0.400024 0.425522 0.485719  NaN  NaN 

[6672 rows x 42 columns]) 

這樣當我打印出來的時候,航空數據幀看起來與此類似嗎?我希望仍然可以對它進行一些計算,或者將它導出爲ex​​cel。

times    AOT_1640 AOT_1020 AOT_870 AOT_675 AOT_667 AOT_555 ... 
2000-08-07 06:49:10  NaN 0.380411 0.406041 0.445789  NaN  NaN 
2000-08-08 06:31:00  NaN 0.322402 0.338164 0.364679  NaN  NaN 
2000-08-09 06:34:56  NaN 0.290533 0.306911 0.336597  NaN  NaN 
2000-08-12 06:30:01  NaN 0.465173 0.471528 0.483079  NaN  NaN 
.... 
2000-01-01 12:23:54  NaN 0.513307 0.557325 0.653497  NaN  NaN 
2000-01-03 12:24:49  NaN 0.439142 0.494118 0.593997  NaN  NaN 
2000-01-04 12:10:30  NaN 0.325203 0.362335 0.426348  NaN  NaN 
2000-01-06 12:11:08  NaN 0.282777 0.307676 0.369811  NaN  NaN 
2000-01-08 12:12:04  NaN 0.165473 0.185018 0.235770  NaN  NaN 
2000-01-10 12:12:52  NaN 0.192453 0.225909 0.310540  NaN  NaN 
2000-01-11 12:13:19  NaN 0.588879 0.646470 0.750459  NaN  NaN 
2000-01-12 12:28:42  NaN 0.535105 0.584593 0.688904  NaN  NaN 
2000-01-13 12:14:20  NaN 0.382645 0.419463 0.496089  NaN  NaN 
2000-01-14 12:14:43  NaN 0.400024 0.425522 0.485719  NaN  NaN 

回答

0

可能是一個更有效的方法來做到這一點,但是我認爲這樣做可以完成工作。

首先,添加字段的日期和時間:

aeronet['date'] = aeronet.times.dt.date 
aeronet['time'] = aeronet.times.dt.time 

現在,aeronet.date.unique()讓你的獨特的日期列表。你稍後需要它。

dates = aeronet.date.unique() 

從早上6點

from datetime import date, datetime, time 
sixam = time(6,0,0,0) 

def fromsix(time): 
    abs(datetime.combine(date.min, time) - datetime.combine(date.min, sixam)) 

aeronet['fromsix'] = aeronet.time.apply(fromsix) 

datetime.combine創建一個欄位,讓絕對距離,因爲很明顯,你不能只是減去兩個時間是必要的。

而現在,終於,

pd.concat([aeronet[aeronet.date == date][aeronet.fromsix == aeronet[aeronet.date == date].fromsix.min()] for date in dates]) 

使用列表理解切片數據幀到個別日期,發現與sixam最小距離的元素,並連接在一起。

+0

因爲aeronet ='aeronet.set_index('times')不是一列,而是一個索引,它不起作用。然而,通過消除這一行代碼,我已經取得了進展,但似乎掛起了功能。打印出來的功能只對每一行返回「無」。當它被捕獲時,它會給出UserWarning的警告:布爾系列鍵將被重新索引以匹配DataFrame索引。 「」「啓動IPython內核的入口點 –