我正在编写代码以获取去年的数据。我想像这样舍入较早的日期:如果是2015年7月14日,我需要2014年8月1日至2015年7月14日的数据
df = pd.read_csv('MyData.csv')
df['recvd_dttm'] = pd.to_datetime(df['recvd_dttm'])
range_max = datetime.datetime.now()
range_min = range_max - pd.tseries.offsets.DateOffset(years=1)+ pd.tseries.offsets.MonthEnd(1) + pd.tseries.offsets.DateOffset(days=1)
if datetime.datetime.now() == is_month_end:
# take slice with final week of data
df = df[(df['recvd_dttm'] >= range_min) &
(df['recvd_dttm'] <= range_max)]
字符串
我的问题是,当它是2015年7月31日,我的代码去到 * 下 * 个月结束,基本上削减了整整一个月。
我正在尝试创建一个for循环来解决这个问题。
如果是月底:
range_min = range_max - pd.tseries.offsets.DateOffset(years=1)
型
否则:
range_min = range_max - pd.tseries.offsets.DateOffset(years=1)+ pd.tseries.offsets.MonthEnd(1) + pd.tseries.offsets.DateOffset(days=1)
型
如何告诉python检查月末?MonthEnd只是一个offset函数。
8条答案
按热度按时间xiozqbni1#
我们可以避免使用只利用
datetime
的短函数来导入calendar
模块。如果明天的月份和今天的月份不一样,那么这意味着今天是当前月份的最后一天。
字符串
现在,针对您的特定用例:
型
6tdlim6h2#
我只是使用calendar模块的monthrange方法来查找该月的最后一天:
字符串
slsn1g293#
如果第二天是另一个月,那就意味着这是一个月的最后一天。
字符串
xqnpmsa84#
我使用的是Pandas,我不想包含另一个库,所以我用这个来检查是否是一个月的最后一天和一年的最后一天:
字符串
yshpjwxd5#
下面是一个纯python的方法,它也考虑到了闰年的二月:
字符串
a0zr77ik6#
好吧,我是这样做的。找到BryanOakley建议的日历模块,并做了这个循环。它检查当前日期,并检查它是否与该月的最后一天相同,并相应地选择range_min。
字符串
jaql4c8m7#
字符串
o2g1uqev8#
这里有一个简短的函数来完成这个任务。它需要dateutil模块,这样你就可以做相对日期的计算。
字符串
它可以这样使用:
型
这将打印以下内容:
型
在这个函数中,我们做了两个简单的步骤
首先我们根据传递给函数的日期找出11个月前的日期
return datetime.date(last_year.year, last_year.month, 1)
个然后我们在那个月的第一天回来。
在上面的输出中,你可以看到这也解释了闰年。