为DataFrame行提供最接近给定日期的日期

时间:2018-06-15 00:03:18

标签: python pandas datetime

我有一个包含多列的DataFrame,df。其中一列名为Date,其项目为datetime个对象。

给定日期datequery,我想返回最接近该日期的

离开this previous answer,我想到了使用以下代码:

result = min(df.iterrows(), key=lambda x: abs(x['Date'] - datequery))

因此,我精神上通过代码的方式是:

  1. 我给min函数一个迭代对象,它遍历每一行,因为我希望函数的输出是行
  2. min然后评估keyfunction的最小值,并从iterable中输出相应的项目。因此它将输出对应于keyfunction
  3. 给出的最低值的行(项)

    而不是这样做,我受到以下错误的欢迎:

    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
    

    我很清楚元组索引不能是一个字符串。 所以我的问题有三个方面:

    1. 它在谈论什么元组?因为没有使用元组(除非它是datetime内的东西)
    2. 这个字符串来自哪里。同样,工作空间中唯一的字符串是'Date',但这应仅用于访问“日期”列,而不是作为元组的索引。
    3. 我该怎么做?

1 个答案:

答案 0 :(得分:0)

所以,回答我的三个问题:

  
      
  1. 它在谈论什么元组?因为没有使用元组(除非它是datetime内的东西)
  2.   

元组是iterrows的输出。我忘了iterrows输出(index, row)元组对,而不仅仅是行本身。

  
      
  1. 这个字符串来自哪里。同样,工作空间中唯一的字符串是'Date',但这应仅用于访问“日期”列,而不是作为元组的索引。
  2.   

字符串是'日期'。

  
      
  1. 我该怎么做?
  2.   
min(df.iterrows(), key=lambda x: abs(x[1]['Date'] - datequery))

因此,[1]将访问由row生成的(index, row)元组对的iterrows()部分。那是我唯一遗漏的东西。

相关问题