在python中选择最接近某个小时的时间

在python中选择最接近某个小时的时间,python,pandas,time-series,Python,Pandas,Time Series,我想看看有没有办法把壁橱的时间定在某个小时。我有以下几点。这个文件包含了10年的数据,我已经把它缩小到一些我想保留的时间序列 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.strp

我想看看有没有办法把壁橱的时间定在某个小时。我有以下几点。这个文件包含了10年的数据,我已经把它缩小到一些我想保留的时间序列

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的时间及其内容,并放弃/忽略pandas系列中的其余内容,并对整个文件执行此操作

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])
当我打印出来时,aeronet数据框看起来像这样吗?我希望还是用它做一些计算,或者把它导出到excel

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   

也许这是一种更有效的方法,但我认为这能完成任务

首先,添加日期和时间字段:

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)
合并是必要的,因为显然不能只减去两次

现在,终于

pd.concat([aeronet[aeronet.date == date][aeronet.fromsix == aeronet[aeronet.date == date].fromsix.min()] for date in dates])
使用列表理解将数据框切分为各个日期,找到距离sixam最小的元素,并将它们连接在一起。


这就是路,伙计。高效、简单、快速。

因为aeronet=aeronet.set_index(“times”)不是一列,而是一个索引,所以它不起作用。然而,通过删除这一行代码,我取得了进展,但似乎对该函数有些迟疑。当我打印出来时,函数只为每一行返回“None”。当它被分类时,它会发出UserWarning警告:布尔系列键将被重新索引以匹配数据帧索引。“”“启动IPython内核的入口点。我将如何进行此操作。因为我只有一个数据帧(aeronet)。从技术上讲,我与什么合并?”?