我想做的是
我试图创建一个列表或数组的日期都落在一个月的特定日期,然后更改第一项。例如:
20-Jan-2023,15-Feb-2023,15-Mar-2023, etc.
我相信这是有记录的地方,但我发现Pandas文件的质量,至少在日期方面,绝对是残暴的,我已经把我的头撞到墙上一段时间了,所以如果这个问题已经在其他地方得到了回答,请温柔一点:)
我尝试过但不起作用的内容(pandas.date_range和bdate_range)
我试过使用pandas.date_range
和bdate_range
,但有两个问题:
1.我无法更改下面生成的输出中的任何项
1.如果有一种方法可以使用这些函数来生成每个月15日的日期列表,我还没有找到它。date_range
https://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)
1条答案
按热度按时间vbkedwbf1#
IIUC,创建一个日期时间索引,开始一个月,然后添加14天以获得15日,最后在日期时间索引的开头插入一个值:
输出: