2021 年的最后一周在pandas.date_range()功能上被指定為 2022 年,而除周六和周日(1 月 1 日和 2 日)外,其余日子都屬于 2021 年。
import pandas as pd
for x in pd.date_range(start='2021-12-01', end='2022-01-04', freq='W'):
print('date: ', x, '\tweek: ', x.week, '\tyear: ', x.year)
Output:
date: 2021-12-05 00:00:00 week: 48 year: 2021
date: 2021-12-12 00:00:00 week: 49 year: 2021
date: 2021-12-19 00:00:00 week: 50 year: 2021
date: 2021-12-26 00:00:00 week: 51 year: 2021
date: 2022-01-02 00:00:00 week: 52 year: 2022
輸出是有道理的,但是,這在我使用的過濾下不起作用:
df[(df['date'].year == x.year) & (df['date'].week == x.week)]
目前這個問題已經用創可貼解決了,但希望明年能完全發揮作用。
uj5u.com熱心網友回復:
這是一個功能,而不是一個錯誤。周編號基于 ISO 8601,特別是:“如果 1 月 1 日是周五、周六或周日,則為上一年的第 52 周或第 53 周”。您需要更改應用程式邏輯以包含該邊緣情況。
https://en.wikipedia.org/wiki/ISO_8601#Week_dates
此外,根據熊貓檔案:
“weekofyear并且week已被棄用。請DatetimeIndex.isocalendar().week改用。”
如果你切換到兩者x.isocalendar().week,x.isocalendar().year你會得到一致的,雖然不是直觀的輸出:
date: 2021-12-19 00:00:00 week: 50 year: 2021
date: 2021-12-26 00:00:00 week: 51 year: 2021
date: 2022-01-02 00:00:00 week: 52 year: 2021
date: 2022-01-09 00:00:00 week: 1 year: 2022
uj5u.com熱心網友回復:
你可以做什么 - 你可以在作業日開始時應用你的過濾,使用這個屬性:
pd.Timestamp(2022, 1, 2).to_period('W').start_time
輸出
Timestamp('2021-12-27 00:00:00')
所以:
import pandas as pd
d = pd.DataFrame({"date":[pd.Timestamp(2022,1,2)]})
d[d["date"].dt.to_period('W').apply(lambda x: x.start_time.isocalendar()[:2] == (2021, 52))]
輸出
date
0 2022-01-02
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/407501.html
標籤:
