Để căn chỉnh (snap) các timestamp trong DateTimeIndex đến tần suất xuất hiện gần nhất, sử dụng phương thức DateTimeIndex.snap() với tham số freq.
Các bước thực hiện
1. Import thư viện
import pandas as pd
2. Tạo DateTimeIndex
Tần suất ngày (D), 6 kỳ, múi giờ Australia/Adelaide:
datetimeindex = pd.date_range('2021-10-20 02:30:50', periods=6, tz='Australia/Adelaide', freq='D')
3. Snap đến cuối tháng (Month end)
print("\nSnap đến tần suất gần nhất (Month end):\n", datetimeindex.snap(freq='M'))
Ví dụ hoàn chỉnh
import pandas as pd
datetimeindex = pd.date_range('2021-10-20 02:30:50', periods=6, tz='Australia/Adelaide', freq='D')
print("DateTimeIndex:\n", datetimeindex)
print("\nTần suất:", datetimeindex.freq)
# Snap đến Month end (M)
print("\nSnap đến Month end:\n", datetimeindex.snap(freq='M'))
Kết quả đầu ra
DateTimeIndex: DatetimeIndex(['2021-10-20 02:30:50+10:30', '2021-10-21 02:30:50+10:30', '2021-10-22 02:30:50+10:30', '2021-10-23 02:30:50+10:30', '2021-10-24 02:30:50+10:30', '2021-10-25 02:30:50+10:30'], dtype='datetime64[ns, Australia/Adelaide]', freq='D') Tần suất:Snap đến tần suất gần nhất: DatetimeIndex(['2021-10-31 02:30:50+10:30', '2021-10-31 02:30:50+10:30', '2021-10-31 02:30:50+10:30', '2021-10-31 02:30:50+10:30', '2021-10-31 02:30:50+10:30', '2021-10-31 02:30:50+10:30'], dtype='datetime64[ns, Australia/Adelaide]', freq=None)
Giải thích
- Tất cả 6 ngày (20-25/10) đều được snap đến 31/10/2021 (cuối tháng 10).
snap()di chuyển timestamp đến mốc tần suất gần nhất (có thể trước hoặc sau).- Khác với
round(): snap dùng offset anchored (như month end, quarter end), round dùng fixed frequency.
Các anchored offset thường dùng
'M' # Month end
'MS' # Month start
'Q' # Quarter end
'QS' # Quarter start
'A' # Year end
'AS' # Year start
'W' # Week end (Sunday)
'W-MON' # Week end Monday
Lưu ý
snap() ít dùng hơn round(), floor(), ceil(). Thường dùng trong xử lý dữ liệu tài chính cần căn chỉnh đến kỳ báo cáo.