提问人:Mainland 提问时间:10/24/2023 最后编辑:Mainland 更新时间:10/24/2023 访问量:76
Python Pandas 数据帧 将儒略日列转换为日期列
Python Pandas Dataframe convert julian day column to date column
问:
我有一个专栏,里面装满了朱利安的日子。我想将它们转换为日期格式。
df1.shape()
(638765, 94)
df1['DAY'] =
0 2022216 # Format = year (2022),day of the year (216)
1 2022216
2 2022216
3 2022216
4 2022216
from datetime import datetime
解决方案-1:
%timeit df1['Date'] = df1['DAY'].apply(lambda x: datetime.strptime('%d'%x,'%Y%j').strftime('%Y-%m-%d'))
11.9 s ± 50.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
0 2022-08-04
1 2022-08-04
2 2022-08-04
3 2022-08-04
4 2022-08-04
解决方案-2:
%timeit df1['Date'] = pd.to_datetime(df1['DAY'], format='%Y%j')
20.3 ms ± 243 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
0 2022-08-04
1 2022-08-04
2 2022-08-04
3 2022-08-04
4 2022-08-04
我非常喜欢上面的解决方案-2,因为它需要不到一秒钟的时间,而另一个解决方案大约需要 11 秒。我的问题是:即使我没有指定它,这也是将给定的儒略日转换为日期格式('%Y-%m-%d')的默认行为吗?to_datetime
答:
1赞
Timeless
10/24/2023
#1
这只是一个巧合。
在第一个解决方案中,您 strftime
到格式,碰巧函数 to_datetime
(您在第二解决方案中使用的)返回具有相同格式的 a。这是因为“%Y-%m-%d”
是后者的默认格式。"%Y-%m-%d"
DatetimeIndex
在后台,你的儒略日的转换是由 _box_as_indexlike
处理的(在处理的最后),这个转换一个 numpy 数组,该数组保存解析的日期时间:DatetimeIndex
#1 the input :
array([2022216, 2022216, 2022216, 2022216, 2022216], dtype=object)
#2 `array_stptime` gives :
array(['2022-08-04T00:00:00.000000000', '2022-08-04T00:00:00.000000000',
'2022-08-04T00:00:00.000000000', '2022-08-04T00:00:00.000000000',
'2022-08-04T00:00:00.000000000'], dtype='datetime64[ns]')
#3 `_box_as_indexlike` gives :
DatetimeIndex(['2022-08-04', '2022-08-04', '2022-08-04', '2022-08-04',
'2022-08-04'], dtype='datetime64[ns]', freq=None)
评论
1赞
Timeless
10/24/2023
注意:您的第 1 个和第 2 个解决方案会产生两种不同的 dtype:和 。object/strings
datetime64[ns]
1赞
FObersteiner
10/24/2023
好吧,OP比我想象的还要复杂;没有向右滚动查看strftime
^^
评论
format='%Y%j'
to_datetime
apply
'%Y-%m-%d'
.dt.strftime("%b %d %Y")