Ame*_*ina 5 python python-3.x pandas
有没有什么办法来获得日期(一个datetime,pd.Timestamp这[周/月/季度/年]的最后一天或同等学历)与datetime,pandas或其他日期和时间utils的?
您可以将 a 添加pandas.DateOffset到DateTimeIndex, Timestampordatetime.date或datetime.datetime:
dates = pd.date_range('2015-8-13', periods=4, freq='3D')
# DatetimeIndex(['2015-08-13', '2015-08-16', '2015-08-19', '2015-08-22'],
# dtype='datetime64[ns]', freq='3D', tz=None)
Run Code Online (Sandbox Code Playgroud)
捕捉到一周的最后一天(例如星期日):
In [232]: dates+offsets.Week(weekday=6)
Out[232]: DatetimeIndex(['2015-08-16', '2015-08-23', '2015-08-23', '2015-08-23'], dtype='datetime64[ns]', freq=None, tz=None)
Run Code Online (Sandbox Code Playgroud)
捕捉到该月的最后一天:
In [207]: dates+offsets.MonthEnd()
Out[207]: DatetimeIndex(['2015-08-31', '2015-08-31', '2015-08-31', '2015-08-31'], dtype='datetime64[ns]', freq=None, tz=None)
Run Code Online (Sandbox Code Playgroud)
捕捉到本季度的最后一天:
In [212]: dates+offsets.QuarterEnd()
Out[215]: DatetimeIndex(['2015-09-30', '2015-09-30', '2015-09-30', '2015-09-30'], dtype='datetime64[ns]', freq=None, tz=None)
Run Code Online (Sandbox Code Playgroud)
捕捉到一年的最后一天:
In [219]: dates+offsets.YearEnd()
Out[222]: DatetimeIndex(['2015-12-31', '2015-12-31', '2015-12-31', '2015-12-31'], dtype='datetime64[ns]', freq=None, tz=None)
Run Code Online (Sandbox Code Playgroud)
请注意,添加偏移量总是会提前日期。例如,2015-08-16 是星期日,添加一个offsets.Week(weekday=6)提前日期 2015-08-23:
In [233]: pd.Timestamp('2015-8-16')+offsets.Week(weekday=6)
Out[233]: Timestamp('2015-08-23 00:00:00')
Run Code Online (Sandbox Code Playgroud)
为了防止这种情况发生,您可以减去一天dates:
In [234]: dates - offsets.Day() + offsets.Week(weekday=6)
Out[237]: DatetimeIndex(['2015-08-16', '2015-08-16', '2015-08-23', '2015-08-23'], dtype='datetime64[ns]', freq=None, tz=None)
Run Code Online (Sandbox Code Playgroud)
datetime仅使用。
>>> d = datetime.date.today()
Run Code Online (Sandbox Code Playgroud)
一周的最后一天:
# This was wrong earlier.
>>> d + datetime.timedelta(days=5 - d.weekday())
datetime.date(2015, 8, 15)
Run Code Online (Sandbox Code Playgroud)
每月最后一天:
>>> datetime.date(year=(d.year + int(d.month % 12 == 0)), month=(d.month + 1) % 12, day=1) - datetime.timedelta(days=1)
datetime.date(2015, 8, 31)
Run Code Online (Sandbox Code Playgroud)
季度的最后一天:
>>> datetime.date(year=d.year, month=((d.month % 3) + 1) * 3 + 1, day=1) - datetime.timedelta(days=1)
datetime.date(2015, 9, 30)
Run Code Online (Sandbox Code Playgroud)
一年的最后一天:
>>> datetime.date(year=d.year, month=12, day=31)
datetime.date(2015, 12, 31)
Run Code Online (Sandbox Code Playgroud)
编辑:这一切都非常难看,使用更高级别的第三方库可能是最好的,除非有令人信服的理由不这样做(而且似乎没有)。
| 归档时间: |
|
| 查看次数: |
5541 次 |
| 最近记录: |