Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么pd.to_datetime根据是否指定了格式使用不同的默认Y/M/D_Python_Pandas - Fatal编程技术网

Python 为什么pd.to_datetime根据是否指定了格式使用不同的默认Y/M/D

Python 为什么pd.to_datetime根据是否指定了格式使用不同的默认Y/M/D,python,pandas,Python,Pandas,这是一个有点奇怪的用例,但是当使用pd.to_datetimepandas转换类似时间的值时,根据是否指定了格式,pandas对年、月和日使用不同的值 pd.to_datetime('02:12:11', format='%H:%M:%S') #Timestamp('1900-01-01 02:12:11') pd.to_datetime('02:12:11') #Timestamp('2021-03-17 02:12:11') 我曾假设在所有情况下,1900-01-01T00:00:00.

这是一个有点奇怪的用例,但是当使用
pd.to_datetime
pandas转换类似时间的值时,根据是否指定了格式,pandas对年、月和日使用不同的值

pd.to_datetime('02:12:11', format='%H:%M:%S')
#Timestamp('1900-01-01 02:12:11')

pd.to_datetime('02:12:11')
#Timestamp('2021-03-17 02:12:11')
我曾假设在所有情况下,
1900-01-01T00:00:00.000
将用于填充缺失的组件,这与(熊猫文档链接的内容)一致,但不知何故,它决定使用
“今天”
来获取其他没有格式的组件


这是在某处记录的还是预期的行为?

如果我正确理解源代码,如果没有
datetime.datetime
对象被传递到
objects\u to\u datetime64ns
则默认为
datetime.now
,除非您指定格式

我必须说,通读源代码让我更加尊重项目的核心维护人员

python3.8>站点包>dateutil>parser.\u parser.py
pd.to_datetime('01:04:06')
为例

if parserinfo:
    return parser(parserinfo).parse(timestr, **kwargs)
else:
    return DEFAULTPARSER.parse(timestr, **kwargs)

据我所知,这将返回
datetime.datetime(2021,3,17,1,4,6)

result, tz_parsed = tslib.array_to_datetime(
            data,
            errors=errors,
            utc=utc,
            dayfirst=dayfirst,
            yearfirst=yearfirst,
            require_iso8601=require_iso8601,
        )
它返回datetime对象

如果这是预期的行为,我会在“是”一方敦促,因为代码是以这种方式编写的,但是在文档中明确之前,我不会给出绝对的确定性,因为pandas依赖于标准python库进行此转换

有关详细信息,请调用堆栈:


熊猫依赖于其他库进行解析,包括python的datetime库和dateutil包

将熊猫作为pd导入
从日期时间导入日期时间作为dt
从dateutil导入解析器
打印(“带格式的日期时间”,pd.to_datetime('02:12:11',格式='%H:%M:%S'))
打印(“带格式的日期时间”,dt.strtime('02:12:11','%H:%M:%S'))
打印(“无格式的熊猫日期时间”,pd.to_datetime('02:12:11'))
打印(“没有格式的dateutil解析器”,parser.parse('02:12:11'))
产生

pandas datetime with format  1900-01-01 02:12:11
datetime with format  1900-01-01 02:12:11
pandas datetime without format  2021-03-17 02:12:11
dateutil parser without format  2021-03-17 02:12:11

因此这里的问题是
dateutil
包使用当前日期作为默认日期,而
strtime()
使用Unix源代码。

我在pandas dev的Gitter频道上分享了您的问题,希望pandas的核心团队成员或了解这一点的人能够回答。Gitter频道链接:
pandas datetime with format  1900-01-01 02:12:11
datetime with format  1900-01-01 02:12:11
pandas datetime without format  2021-03-17 02:12:11
dateutil parser without format  2021-03-17 02:12:11