我有一个包含多列的DataFrame,df
。其中一列名为Date
,其项目为datetime
个对象。
给定日期datequery
,我想返回最接近该日期的行。
离开this previous answer,我想到了使用以下代码:
result = min(df.iterrows(), key=lambda x: abs(x['Date'] - datequery))
因此,我精神上通过代码的方式是:
min
函数一个迭代对象,它遍历每一行,因为我希望函数的输出是行min
然后评估keyfunction
的最小值,并从iterable中输出相应的项目。因此它将输出对应于keyfunction
而不是这样做,我受到以下错误的欢迎:
In [21]: min(df.iterrows(), key=lambda x: abs(x['Date'] - datequery))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
c:/Random/Path/script.py in <module>()
----> 1 min(df.iterrows(), key=lambda x: abs(x['Date'] - datequery))
c:/Random/Path/script.py in <lambda>(x)
----> 1 min(df.iterrows(), key=lambda x: abs(x['Date'] - datequery))
TypeError: tuple indices must be integers or slices, not str
我很清楚元组索引不能是一个字符串。 所以我的问题有三个方面:
datetime
内的东西)'Date'
,但这应仅用于访问“日期”列,而不是作为元组的索引。答案 0 :(得分:0)
所以,回答我的三个问题:
- 它在谈论什么元组?因为没有使用元组(除非它是
醇>datetime
内的东西)
元组是iterrows
的输出。我忘了iterrows输出(index, row)
元组对,而不仅仅是行本身。
- 这个字符串来自哪里。同样,工作空间中唯一的字符串是
醇>'Date'
,但这应仅用于访问“日期”列,而不是作为元组的索引。
字符串是'日期'。
- 我该怎么做?
醇>
min(df.iterrows(), key=lambda x: abs(x[1]['Date'] - datequery))
因此,[1]
将访问由row
生成的(index, row)
元组对的iterrows()
部分。那是我唯一遗漏的东西。