簡體   English   中英

Pandas to_datetime 將年-周轉換為 2019 年的日期,第一周是 wk0

[英]Pandas to_datetime convert year-week to date in 2019, first week is wk0

我曾經使用年份和周數將某些建議轉換為日期。 它在 2019 年之前運行良好,但是當我嘗試導入 2019 wk1 數據時,它已連接。

2019 wk1 變成 2019-01-07 ~ 2019-01-03

但相反,如果我使用日期轉換為年和周,則是正確的。

我可以知道我的代碼有什么問題嗎? 謝謝

d = {'year': [2018, 2018, 2018, 2019, 2019, 2019], 'week': [0, 1, 52, 0, 1, 2]}
df = pd.DataFrame(data=d)
df['date'] = pd.to_datetime(df['year'].map(str) + df['week'].map(str) + '-4', format='%Y%W-%w')
df['yearwk'] = pd.to_datetime(df['date'], format='%Y-%M-%D').dt.strftime('%YW%V')
print(df)

   year  week       date   yearwk
0  2018     0 2018-01-04  2018W01
1  2018     1 2018-01-04  2018W01
2  2018    52 2018-12-27  2018W52
3  2019     0 2019-01-03  2019W01
4  2019     1 2019-01-10  2019W02
5  2019     2 2019-01-17  2019W03

我使用給定的 year 和 weeknum 轉換為日期。 理想情況下,2019WK1 應該在 2018-12-31 到 2019-01-05 之間,但它變成了 2019-01-06 到 2019-01-13。 然后我使用該日期轉換為年份和周,結果正是我所期望的。

根據strftime() 和 strptime() 行為

%W:以十進制數表示的一年中的周數(星期一為一周的第一天)。 新年中第一個星期一之前的所有日子都被視為第 0 周。

%w:工作日為十進制數,其中 0 是星期日,6 是星期六。

你把 4 作為 %w,表示你想要你提供的星期幾的星期四日期。

從星期一開始的 2018 年的第一周 ( %W =1) 是:1 月 1 日 - 1 月 7 日或 1 月 4 日(星期四)

從星期一開始的 2019 年的第一周 ( %W =1) 是:1 月 7 日 - 1 月 13 日或 1 月 10 日(星期四)

對於 2018 年,前一周沒有星期四,因此%W =0 將輸出與%W =1 相同的結果。 但是,對於 2019 年,前一周有一個星期四,因此%W =0 將輸出 1 月 3 日。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM