根据日期范围过滤行。日期格式错误

时间:2019-11-13 12:32:50

标签: python pandas dataframe datetime filter

我想根据日期范围来过滤数据帧,该日期范围位于该数据帧系列中最大值日期的任一侧。手动输入日期(例如, '2018-01-05',但是当该日期存储在系列对象中时,它将不起作用-而且我太厚了以至于无法找出原因。 我尝试了字符串转换,并从该系列中提取了一个日期作为值,但无济于事。这是一个程式化的版本:

    data = {'dates':['2018-01-01','2018-01-02','2018-01-03','2018-01-04','2018-01-05', \
    '2018-01-06'],'values':[-20,30,15,10,4,7]}
    data = pd.DataFrame(data)
    data.dates = pd.to_datetime(data.dates,dayfirst=True)

    maxval = data.nlargest(1,'values')
    maxdate = maxval.loc[:,'dates']

    start_remove = maxdate-timedelta(days=1)
    end_remove = maxdate+timedelta(days=1)

    data.loc[(data['dates']<start_remove) | (data['dates']>end_remove)]

给出ValueError:只能比较标记相同的Series对象

而:

    data.loc[(data['dates']<'2018-01-03) | (data['dates']>'2018-01-05)]

工作正常。

1 个答案:

答案 0 :(得分:0)

您可以将Series.idxmax用于最大values的索引值:

maxdate = data.set_index('dates')['values'].idxmax()

问题是maxdate是一个元素Series而不是标量,可能的解决方案是通过DataFrame.iatIndex.get_loc的位置来选择列dates的位置:< / p>

maxdate = maxval.iat[0, maxval.column.get_loc('dates')]

或通过带有DataFrame.at的标签选择并获得索引的第一个值:

maxdate = maxval.at[maxval.index[0], 'dates']

print (maxdate)
2018-01-02 00:00:00