pandas 如何创建一个列表或数组的日子落在每月的15日

htrmnn0y  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(97)

我想做的是
我试图创建一个列表或数组的日期都落在一个月的特定日期,然后更改第一项。例如:

20-Jan-2023,15-Feb-2023,15-Mar-2023, etc.

我相信这是有记录的地方,但我发现Pandas文件的质量,至少在日期方面,绝对是残暴的,我已经把我的头撞到墙上一段时间了,所以如果这个问题已经在其他地方得到了回答,请温柔一点:)

我尝试过但不起作用的内容(pandas.date_range和bdate_range)

我试过使用pandas.date_rangebdate_range,但有两个问题:
1.我无法更改下面生成的输出中的任何项
1.如果有一种方法可以使用这些函数来生成每个月15日的日期列表,我还没有找到它。date_rangehttps://pandas.pydata.org/docs/reference/api/pandas.date_range.html的文档没有提到freq的有效选项是什么(看看为什么我觉得文档很糟糕?).这里有一个列表https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases但我需要的东西似乎不在那里
我尝试的是:

import pandas as pd

x = pd.bdate_range(start='15-Jan-2023', periods=60, freq='MS')

x[0] = pd.to_datetime('15-Jan-2023')  # doesn't work

TypeError: Index does not support mutable operations

什么方法有效(但比较复杂,一定有更好的方法)

下面的代码可以工作,但看起来很复杂和笨拙。我希望有更好的方法。我创建了一个数据框,其中有一列要添加的月份(0到60),然后将DateOffset应用于每行。此外,这不是矢量化的,可能会很慢(不是在这个玩具示例中,而是在大型数据集上)。

import pandas as pd
import numpy as np
day_0 = pd.to_datetime('15-Jan-2023')
df = pd.DataFrame()
df['months to add'] = np.arange(0,60)
df['dates'] = df.apply(lambda x: day_0 + pd.DateOffset(months = x['months to add'] ), axis=1)
df.loc[0,'dates'] = pd.to_datetime('20-Jan-2023')
df = df.drop('months to add', axis=1)
vbkedwbf

vbkedwbf1#

IIUC,创建一个日期时间索引,开始一个月,然后添加14天以获得15日,最后在日期时间索引的开头插入一个值:

import pandas as pd
s = pd.date_range('2023-01-20', periods = 12, freq='MS') + pd.DateOffset(days=14)
s = s.insert(0, pd.Timestamp('2023-01-20'))
s

输出:

DatetimeIndex(['2023-01-20', '2023-02-15', '2023-03-15', '2023-04-15',
               '2023-05-15', '2023-06-15', '2023-07-15', '2023-08-15',
               '2023-09-15', '2023-10-15', '2023-11-15', '2023-12-15',
               '2024-01-15'],
              dtype='datetime64[ns]', freq=None)

相关问题