我有一栏写满了朱利安式的日子.我想将它们转换为日期格式.

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个S.我的问题是:这是to_datetime将给定的儒略日转换为日期格式(‘%Y-%m-%d’)的默认行为吗?

推荐答案

这只是一个巧合.

在您的第一个解决方案中,您将strftime转换为"%Y-%m-%d"格式,碰巧函数to_datetime(您在第二个解决方案中使用的)返回具有相同格式的DatetimeIndex.这是因为"%Y-%m-%d" is the default format of the latter.

在幕后,您的儒略日的转换由_box_as_indexlike来处理(在处理的最后),下面的代码将一个保存已解析的日期时间的Numy数组转换为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)

Python相关问答推荐

更改Python中的数据格式

有条件的滚动平均数(面试问题)

Raspberry Pi Pico W、WebSockets和从中获取数据

Python:将带有UNNESTED div标签的html文档解析为dataframe(使用Beautiful Soup )

如何在Python中更改按钮的值(Flask )

";abc";+5被认为是python中的一个表达式吗?

命令输出在终端上打印,并且stdout为空.如何存储输出或重定向到标准输出?

聚合数据帧的n个连续行的惯用方式

Lambda调用未处理,3秒后超时?

用于将Custom TypeAlias替换为NotRequired的典型插件

Python .删除DataFrame中的标题标签(&U;UNNAMED:0),并将其余标题标签向左移动(不更改值)

如何安装从Anaconda包站点下载的.conda文件?

如何编写将字符串转换为参数类型的静态类型的Python函数?

如何在pandas中捕获DateParseError?

如何创建Pandas 数据帧而不对长值进行舍入

在Pandas中使用GROUP BY后,如何在每个组中添加一列或更改数据?

根据条件从数据帧中删除重复行

在Python类中动态生成函数

AttributeError:找不到调用运算符";bpy.ops.import_scene.obj";错误

如何从视频中的特定时间间隔提取所有帧?