Finden nächste Zeile des DataFrame zu gegebener Zeit in Pandas

Habe ich ein Pandas dataframe, das ist indiziert durch eine DatetimeIndex:

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 53732 entries, 1993-01-07 12:23:58 to 2012-12-02 20:06:23
Data columns:
Date(dd-mm-yy)_Time(hh-mm-ss)       53732  non-null values
Julian_Day                          53732  non-null values
AOT_870                             53732  non-null values
440-870Angstrom                     53732  non-null values
440-675Angstrom                     53732  non-null values
500-870Angstrom                     53732  non-null values
Last_Processing_Date(dd/mm/yyyy)    53732  non-null values
Solar_Zenith_Angle                  53732  non-null values
time                                53732  non-null values
dtypes: datetime64[ns](2), float64(6), object(1)

Ich soll die Zeile zu finden, die am nächsten ist zu einem bestimmten Zeitpunkt:

image_time = dateutil.parser.parse('2009-07-28 13:39:02')

finden und wie nah es ist. So weit, ich habe versucht, verschiedene Dinge, die auf der Idee basiert, rechnet man die Zeit, die ich möchte von allen die Zeiten und die Suche nach dem kleinsten absoluten Wert, aber nicht ganz zu funktionieren scheint.

Beispiel:

aeronet.index - image_time

Gibt eine Fehlermeldung, die ich denke, ist aufgrund der +/- auf einem Datetime-index shifting Dinge, also habe ich versucht, indem Sie den index in eine andere Spalte und dann arbeiten:

aeronet['time'] = aeronet.index
aeronet.time - image_time

Diese scheint zu funktionieren, aber das zu tun, was ich will, ich brauche, um die ABSOLUTE Zeit Unterschied, nicht der relative Unterschied. Allerdings läuft gerade abs oder np.abs auf gibt es einen Fehler:

abs(aeronet.time - image_time)

C:\Python27\lib\site-packages\pandas\core\series.pyc in __repr__(self)
   1061         Yields Bytestring in Py2, Unicode String in py3.
   1062         """
-> 1063         return str(self)
   1064 
   1065     def _tidy_repr(self, max_vals=20):

C:\Python27\lib\site-packages\pandas\core\series.pyc in __str__(self)
   1021         if py3compat.PY3:
   1022             return self.__unicode__()
-> 1023         return self.__bytes__()
   1024 
   1025     def __bytes__(self):

C:\Python27\lib\site-packages\pandas\core\series.pyc in __bytes__(self)
   1031         """
   1032         encoding = com.get_option("display.encoding")
-> 1033         return self.__unicode__().encode(encoding, 'replace')
   1034 
   1035     def __unicode__(self):

C:\Python27\lib\site-packages\pandas\core\series.pyc in __unicode__(self)
   1044                     else get_option("display.max_rows"))
   1045         if len(self.index) > (max_rows or 1000):
-> 1046             result = self._tidy_repr(min(30, max_rows - 4))
   1047         elif len(self.index) > 0:
   1048             result = self._get_repr(print_header=True,

C:\Python27\lib\site-packages\pandas\core\series.pyc in _tidy_repr(self, max_vals)
   1069         """
   1070         num = max_vals //2
-> 1071         head = self[:num]._get_repr(print_header=True, length=False,
   1072                                     name=False)
   1073         tail = self[-(max_vals - num):]._get_repr(print_header=False,

AttributeError: 'numpy.ndarray' object has no attribute '_get_repr'

Bin ich an dieses der richtige Weg? Wenn ja, wie sollte ich abs zu arbeiten, so dass ich wählen kann dann das minimum der absoluten Zeit Unterschied, und so bekommen die nächste Zeit. Wenn nicht, was ist der beste Weg, dies zu tun mit Pandas Zeit-Serie?

InformationsquelleAutor robintw | 2013-02-27

Schreibe einen Kommentar