我有一个数据框,它提供了两个整数列,其中包含一年中的年份和星期:
import pandas as pd
import numpy as np
L1 = [43,44,51,2,5,12]
L2 = [2016,2016,2016,2017,2017,2017]
df = pd.DataFrame({"Week":L1,"Year":L2})
df
Out[72]:
Week Year
0 43 2016
1 44 2016
2 51 2016
3 2 2017
4 5 2017
5 12 2017
我需要从这两个数字创建一个日期时间对象。
我试过这个,但它抛出一个错误:
df["DT"] = df.apply(lambda x: np.datetime64(x.Year,'Y') + np.timedelta64(x.Week,'W'),axis=1)
然后我尝试了这个,它有效但给出了错误的结果,即它完全忽略了星期:
df["S"] = df.Week.astype(str)+'-'+df.Year.astype(str)
df["DT"] = df["S"].apply(lambda x: pd.to_datetime(x,format='%W-%Y'))
df
Out[74]:
Week Year S DT
0 43 2016 43-2016 2016-01-01
1 44 2016 44-2016 2016-01-01
2 51 2016 51-2016 2016-01-01
3 2 2017 2-2017 2017-01-01
4 5 2017 5-2017 2017-01-01
5 12 2017 12-2017 2017-01-01
我真的迷失在 Python 的 datetime
、Numpy 的 datetime64
和 pandas Timestamp
我正在使用 Python 3,如果它以任何方式相关的话。
编辑:
从 Python 3.8 开始,这个问题很容易通过 datetime.date 对象上新引入的方法解决: https ://docs.python.org/3/library/datetime.html#datetime.date.fromisocalendar
原文由 Khris 发布,翻译遵循 CC BY-SA 4.0 许可协议
尝试这个:
从 UNIX 纪元时间戳解析它要容易得多:
10M 行 DF 的 时序:
设置:
查看:
定时:
结论: 我认为转换 10.000.000 行需要 156 毫秒并不算慢