Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。本文主要介绍一下Pandas中pandas.to_datetime方法的使用。

pandas.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=None, box=True, format=None, exact=True, unit=None, infer_datetime_format=False, origin='unix', cache=True)                                     [source]

将参数转换为datetime

参数

arg : integer,float, string, datetime,

list, tuple, 1-d array(一维数组),Series

0.18.1版中的新功能:或类似DataFrame/dict

errors : {'ignore','raise','coerce'}

默认为'raise'

如果为‘raise’,则无效的解析将引发异常

如果为 ‘coerce’,则将无效解析设置为NaT

如果为 ‘ignore’,则无效的解析将返回输入

dayfirst : boolean,默认为False

如果argstr或类似列表,

则指定日期解析顺序。

如果为True,则首先解析日期,

例如12/10/11解析为2012-11-10。

警告dayfirst = True并不严格,

但更喜欢使用day first进行解析(

这是一个已知的错误,基于dateutil的行为)。

yearfirst : boolean,默认为False

如果argstr或类似列表,则指定日期解析顺序。

如果True解析日期以年份为第一,

则将10/11/12解析为2010-11-12。

如果dayfirstyearfirst均为True

则在yearfirst之后(与dateutil相同)。

警告yearfirst = True并不严格,

但更喜欢使用year first进行解析

(这是一个已知的错误,基于dateutil的行为)。

版本0.16.1中的新功能。

utc : boolean,默认None

如果为True,则返回UTC DatetimeIndex

(也转换任何支持tz的datetime.datetime对象)。

box: boolean,默认为True

如果True返回DatetimeIndex或类似Index的对象

如果为False,则返回值的ndarray。

从0.25.0版开始不推荐使用:

Series.to_numpy()Timestamp.to_datetime64() 

分别使用或分别获取值或numpy.datetime64ndarray

format : string,默认None

strftime来解析时间,例如“%d /%m /%Y”

请注意,“%f”将一直解析到纳秒。

有关选择的更多信息,

请参见strftime文档:

strftime-and-strptime-behavior

exact : boolean,默认为True

如果为True,则需要完全匹配的格式。

如果为False,则允许格式匹配目标字符串中的任何位置。

unit : string,默认为“ns”

arg的单位(D,s,ms,us,ns)表示单位,

它是整数或浮点数。这将基于原点。

例如,对于unit ='ms'origin ='unix'(默认值),

这将计算到unix纪元开始的毫秒数。

infer_datetime_format : boolean,默认为False

如果为True且未给出格式,

请尝试推断日期时间字符串的格式,

如果可以推断出日期格式,

请切换到解析它们的更快方法。

在某些情况下,这可以使解析速度提高约5-10倍。

origin : scalar,默认为'unix'

定义参考日期。自该参考日期以来,

数值将被解析为单位数(由unit定义)。

如果是“unix”(或POSIX)时间;

原点设置为1970-01-01。

如果为'julian',则单位必须为'D'

并且原点设置为Julian Calendar的开头。

Julian天数0被指定为

从公元前4713年1月1日正午开始的那一天。

如果时间戳可转换,

则将原点设置为由原点标识的时间戳。

0.20.0版中的新功能。

cache : boolean,默认为True

如果为True

则使用唯一的转换日期缓存来应用datetime转换。

解析重复的日期字符串时,

尤其是带有时区偏移的日期字符串时,

可能会大大提高速度。

0.23.0版中的新功能。

在0.25.0版中进行了更改: -将默认值从False更改为True

返回值

ret : 日期时间(如果解析成功)。

返回类型取决于输入:

list-like:DatetimeIndex

Series:datetime64 dtype Series

scalar:时间戳(Timestamp)

如果无法返回指定的类型

(例如,当输入的任何元素

Timestamp.min之前或Timestamp.max之后)

,则返回将具有datetime.datetime类型

(或对应的array/Series)。

例子

从DataFrame的多个列中组合一个日期时间。键可以是常见的缩写,例如['year','month','day','minute','second','ms','us','ns'])或相同的复数形式

>>> df = pd.DataFrame({'year': [2015, 2016],
... 'month': [2, 3],
... 'day': [4, 5]})
>>> pd.to_datetime(df)
0 2015-02-04
1 2016-03-05
dtype: datetime64[ns]

如果日期不符合时间戳限制,则传递errors ='ignore'将返回原始输入,而不引发任何异常。

如果将error ='coerce'传递给NaT,则除了将非日期(或不可解析的日期)强制为NaT外,还将对NaT强制执行越界日期。

>>> pd.to_datetime('13000101', format='%Y%m%d', errors='ignore')
datetime.datetime(1300, 1, 1, 0, 0)
>>> pd.to_datetime('13000101', format='%Y%m%d', errors='coerce')
NaT

传递infer_datetime_format = True通常可以加快解析速度,如果解析不是完全采用ISO8601格式,而是采用常规格式

>>> s = pd.Series(['3/11/2000', '3/12/2000', '3/13/2000'] * 1000)
>>> s.head()
0 3/11/2000
1 3/12/2000
2 3/13/2000
3 3/11/2000
4 3/12/2000
dtype: object
>>> %timeit pd.to_datetime(s,infer_datetime_format=True)  # doctest: +SKIP
100 loops, best of 3: 10.4 ms per loop
>>> %timeit pd.to_datetime(s,infer_datetime_format=False)  # doctest: +SKIP
1 loop, best of 3: 471 ms per loop

使用Unix纪元时间

>>> pd.to_datetime(1490195805, unit='s')
Timestamp('2017-03-22 15:16:45')
>>> pd.to_datetime(1490195805433502912, unit='ns')
Timestamp('2017-03-22 15:16:45.433502912')

警告: 对于float arg,可能会发生精确舍入。为防止意外行为,请使用固定宽度的精确类型。

使用非unix纪元原点

>>> pd.to_datetime([1, 2, 3], unit='D',
... origin=pd.Timestamp('1960-01-01'))
DatetimeIndex(['1960-01-02', '1960-01-03', '1960-01-04'], dtype='datetime64[ns]', freq=None)