jen*_*ryb 2 python datetime pandas
我正在编写代码来获取去年的数据。我想像这样对较早的日期进行四舍五入:如果是 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)]
Run Code Online (Sandbox Code Playgroud)
我的问题是,当它是2015年7月31日,我的代码转到结束未来一个月,基本上切割出一整月。
我正在尝试创建一个 for 循环来解决这个问题。
如果是月底:
range_min = range_max - pd.tseries.offsets.DateOffset(years=1)
Run Code Online (Sandbox Code Playgroud)
别的:
range_min = range_max - pd.tseries.offsets.DateOffset(years=1)+ pd.tseries.offsets.MonthEnd(1) + pd.tseries.offsets.DateOffset(days=1)
Run Code Online (Sandbox Code Playgroud)
我如何告诉python检查月底?MonthEnd 只是一个偏移函数。
Chr*_*ing 18
我们可以避免导入calendar仅利用datetime.
如果明天的月份与今天的月份不同,则意味着今天是当月的最后一天。我们可以使用一个简短的函数以编程方式检查这一点,例如
import datetime
def end_of_month(dt):
todays_month = dt.month
tomorrows_month = (dt + datetime.timedelta(days=1)).month
return tomorrows_month != todays_month
Run Code Online (Sandbox Code Playgroud)
现在,针对您的具体用例:
now = datetime.datetime.now()
if end_of_month(now):
range_min = range_max - pd.tseries.offsets.DateOffset(years=1)
else:
range_min = range_max - pd.tseries.offsets.DateOffset(years=1) +pd.tseries.offsets.MonthEnd(1) + pd.tseries.offsets.DateOffset(days=1)
Run Code Online (Sandbox Code Playgroud)
我只是使用日历模块的 monthrange 方法来查找该月的最后一天:
def check_if_last_day_of_week(date):
import datetime
import calendar
# calendar.monthrange return a tuple (weekday of first day of the
# month, number
# of days in month)
last_day_of_month = calendar.monthrange(date.year, date.month)[1]
# here i check if date is last day of month
if date == datetime.date(date.year, date.month, last_day_of_month):
return True
return False
>>> date = datetime.date(2018, 12, 31)
>>> check_if_last_day_of_week(date)
True
Run Code Online (Sandbox Code Playgroud)
好吧,这就是我所做的。找到 BryanOakley 建议的日历模块并制作了这个循环。它检查当前日期并检查它是否与该月的最后一天相同,并相应地选择 range_min。
if datetime.datetime.now().day == calendar.monthrange(date.year, date.month)[1]:
range_min = range_max - pd.tseries.offsets.DateOffset(years=1)+ pd.tseries.offsets.DateOffset(days=1)
else:
range_min = range_max - pd.tseries.offsets.DateOffset(years=1)+ pd.tseries.offsets.MonthEnd(1) + pd.tseries.offsets.DateOffset(days=1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10567 次 |
| 最近记录: |