1

我有如下价格指数的日期列,

日期 价格
2010-01-01 23
2010-12-31 25
2013-02-03 24
2013-12-31 28
2016-03-04 27
2016-12-31 28
2018-01-01 31
2020-01-01 30
2020-12-31 20

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

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

由于这是日期 str.contains 或 startswith 或 endswith 不起作用。

有没有办法做到这一点?

谢谢

4

2 回答 2

2

将日期列转换为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
于 2021-03-14T07:06:18.237 回答
1

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

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

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

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

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

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

编辑

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

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 ColumnBYearEnd包含列中各个日期的营业年度结束日期Date

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

df[df['Date1'] == df['BYearEnd']] 
于 2021-03-14T09:34:42.843 回答