gpt4 book ai didi

python - 在 Pandas 中找到最接近给定时间的 DataFrame 行

转载 作者:太空狗 更新时间:2023-10-29 17:26:40 25 4
gpt4 key购买 nike

我有一个由 DatetimeIndex 索引的 Pandas 数据框:

<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)

我想找到最接近某个时间的行:

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

并找出它有多接近。到目前为止,我已经根据从所有时间中减去我想要的时间并找到最小绝对值的想法尝试了各种方法,但似乎都没有奏效。

例如:

aeronet.index - image_time

给出了一个错误,我认为这是由于日期时间索引上的 +/- 移动造成的,所以我尝试将索引放入另一列然后进行处理:

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

这似乎可行,但要执行我想要的操作,我需要获得绝对时差,而不是相对时差。但是,仅在其上运行 absnp.abs 会出现错误:

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'

我的处理方式是否正确?如果是这样,我应该如何让 abs 工作,以便我可以选择最小的绝对时间差,从而获得最接近的时间。如果不是,使用 Pandas 时间序列执行此操作的最佳方法是什么?

最佳答案

这个简单的方法将返回最接近给定日期时间对象的 TimeSeriesIndex 条目(的整数索引)。无需将索引复制到常规列 - 只需使用 .to_pydatetime 方法即可。

import numpy as np

i = np.argmin(np.abs(df.index.to_pydatetime() - image_time))

然后您只需使用 DataFrame 的 .iloc 索引器:

df.iloc[i]

这是一个执行此操作的函数:

def fcl(df, dtObj):
return df.iloc[np.argmin(np.abs(df.index.to_pydatetime() - dtObj))]

然后您可以进一步无缝过滤,例如

fcl(df, dtObj)['column']

关于python - 在 Pandas 中找到最接近给定时间的 DataFrame 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15115547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com