Python 根据日期范围对行进行筛选。日期格式错误

Python 根据日期范围对行进行筛选。日期格式错误,python,pandas,dataframe,datetime,filter,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'],'valu

我想根据数据帧序列中最大值日期两侧的日期范围筛选数据帧。对于手动输入的日期,例如“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)]
data={'dates':['2018-01-01'、'2018-01-02'、'2018-01-03'、'2018-01-04'、'2018-01-05'\
“2018-01-06”],“价值”:[-20,30,15,10,4,7]}
数据=pd.DataFrame(数据)
data.dates=pd.to_datetime(data.dates,dayfirst=True)
maxval=data.nlargest(1,'values')
maxdate=maxval.loc[:,'dates']
开始时间=最大日期时间增量(天数=1)
end_remove=maxdate+timedelta(天数=1)
data.loc[(数据['dates']end\u删除)]
给定值错误:只能比较标记相同的系列对象

鉴于:

    data.loc[(data['dates']<'2018-01-03) | (data['dates']>'2018-01-05)]
data.loc[(数据['dates']可用于最大
值的索引值

maxdate = data.set_index('dates')['values'].idxmax()
maxdate = maxval.iat[0, maxval.column.get_loc('dates')]

问题是
maxdate
是一个元素
系列
而不是标量,可能的解决方案是按位置和列的位置选择
日期

maxdate = data.set_index('dates')['values'].idxmax()
maxdate = maxval.iat[0, maxval.column.get_loc('dates')]
或使用标签选择并获取索引的第一个值:

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

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

非常感谢。对于一个简单的问题来说,这是一个令人沮丧的冗长问题。为什么我不能将maxdate作为maxval['dates']访问或转换为str(maxval['dates']不清楚)。@Lymacro-我认为原因是大多数通用函数,但我同意,这不是一个容易找到的问题。如果我的答案有用,请不要忘记。谢谢。