Pandas中基于正则表达式的过滤日期索引

2024-09-27 00:20:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个日期栏,价格指数如下

^{tb1}$

我想提取以12-31结尾的日期。我怎么做

我试过使用data.index.loc['*-12-31]它不起作用

由于这是date str.contains或startswith或endswith不起作用

有没有办法做到这一点

谢谢


Tags: datadateindex结尾loccontainsstr办法
2条回答

如果我们的目标是在不修改DataFrame内容的情况下从DataFrame中提取相关日期,我们可以这样做:

案例1:“日期”列已采用字符串格式,请使用:

df[df['Date'].str.endswith('12-31')]

案例2:“日期”列已采用日期时间格式,请使用:

df[df.assign(Date=df['Date'].astype(str))['Date'].str.endswith('12-31')]

两者都根据当前数据类型提供所需的提取输出,而无需修改数据帧

编辑

如果希望自动提取业务年度结束时的条目,可以尝试以下代码。这是供您参考的,您可能需要进一步微调它以清理一些中间列

df['Date1'] = pd.to_datetime(df['Date'])    
df['BYearEnd'] = pd.to_datetime(df['Date1'].dt.year.astype(str) + '-12-01') + pd.offsets.BMonthEnd(1)

在这里,我们创建了临时列Date1BYearEnd,其值与列Date对应。列BYearEnd包含列Date中各个日期的业务年度结束日期

然后,我们可以使用以下代码提取相关日期:

df[df['Date1'] == df['BYearEnd']] 

将日期列转换为datetime数据类型

df['Date'] = pd.to_datetime(df['Date'])

逐月逐日过滤

df.loc[(df.Date.dt.month == 12) & (df.Date.dt.day == 31)]

输出

        Date  Price
1 2010-12-31     25
3 2013-12-31     28
5 2016-12-31     28
8 2020-12-31     20

相关问题 更多 >

    热门问题