我有一個pandas df有兩列year和week_number.
df = pd.DataFrame({'year': [2019, 2020, 2021, 2022], 'week_number':[3,12,38,42]})
df
year week_number
0 2019 3
1 2020 12
2 2021 38
3 2022 42
我知道我可以將以下內容應用于每一行并將它們轉換為日期時間值但是,我想知道是否有更有效的方法可以為大資料幀執行此操作并將結果存盤在第三列中?
import datetime
single_day = "2013-26"
converted_date = datetime.datetime.strptime(single_day '-1', "%Y-%W-%w")
print(converted_date)
uj5u.com熱心網友回復:
我不會說您的方式效率低下,但是如果您想要一種完全矢量化的方式,而無需匯入另一個庫并附加您的資料框,那么這可能就是您正在尋找的
import pandas as pd df = pd.DataFrame({'year': [2019, 2020, 2021, 2022], 'week_number':[3,12,38,42]}) df['date'] = pd.to_datetime((df['year']*100 df['week_number']).astype(str) '0', format='%Y%W%w') df
uj5u.com熱心網友回復:
如果您使用的是 Python >= 3.8,請使用datetime.date.fromisocalendar。也適用于日期時間。
# 11. May 2022 is a Wednsesday in the 19h week
>>> date.fromisocalendar(2022, 19, 3)
datetime.date(2022, 5, 11)
作為新列:
df['date'] = df[['year', 'week_number']].apply(lambda args: date.fromisocalendar(args[0], args[1], 1), axis=1)
uj5u.com熱心網友回復:
使用 apply 回圈遍歷行 (axis=1) 和一個將兩列連接為字串的 lambda 函式,然后完全按照您在上面所做的事情進行操作:) 也許這不是您正在尋找的答案,因為您尋找最有效的解決方案。但是,這確實有效!
df['convert_date']=df.apply(lambda x: datetime.strptime(f"{x.year}-{x.week_number}" '-1', "%Y-%W-%w"), axis=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472585.html
上一篇:如何解決串列索引超出范圍的問題?
下一篇:多種日期格式,朝向一種正確的格式
