pandas.to_datetime() 是一个非常强大的函数,用于将各种格式的日期或时间数据转换为 datetime 类型。它支持多种输入格式,包括字符串、数字、时间戳等,并且能自动解析常见的日期时间格式。本文主要介绍一下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)。

例子

1)将字符串转换为 datetime 类型

import pandas as pd

# 单个日期字符串
date_str = '2024-12-20'
date = pd.to_datetime(date_str)
print(date)  # 输出:2024-12-20 00:00:00

# 多个日期字符串
date_strs = ['2024-12-20', '2024-12-21']
dates = pd.to_datetime(date_strs)
print(dates)
# 输出:
# DatetimeIndex(['2024-12-20', 
#'2024-12-21'], dtype='datetime64[ns]',
#freq=None)

2)处理不同的日期格式

使用 format 参数来指定日期格式,避免 pandas 自动推断导致的错误。

import pandas as pd

date_str = '20-12-2024'
date = pd.to_datetime(date_str, format='%d-%m-%Y')
print(date)  # 输出:2024-12-20 00:00:00

3)将 Unix 时间戳转换为 datetime 类型

import pandas as pd

timestamp = 1700000000  # Unix 时间戳
date = pd.to_datetime(timestamp, unit='s')
print(date)  # 输出:2023-11-27 08:40:00

4)自动推断日期格式

如果没有指定日期格式,pandas 会尝试自动推断。

import pandas as pd

date_strs = ['2024-12-20', '20/12/2024', '2024.12.20']
dates = pd.to_datetime(date_strs)
print(dates)
# 输出:
# DatetimeIndex(['2024-12-20', 
#'2024-12-20', '2024-12-20'],
#dtype='datetime64[ns]', freq=None)

5)处理不规则的日期格式

对于格式不统一的日期时间数据,pandas.to_datetime() 会自动解析,但有时可能需要手动清理数据。

import pandas as pd

date_strs = ['2024-12-20', 'December 21, 2024', '21/12/2024']
# 错误的数据会被转为 NaT
dates = pd.to_datetime(date_strs, errors='coerce')
print(dates)
# 输出:
# DatetimeIndex(['2024-12-20',
#'2024-12-21', '2024-12-21'],
#dtype='datetime64[ns]', freq=None)

6)指定时区

可以使用 tz 参数来指定时区。

import pandas as pd

date_str = '2024-12-20 12:30:00'
date = pd.to_datetime(date_str).tz_localize('UTC')
print(date)  # 输出:2024-12-20 12:30:00+00:00

7)处理缺失值

对于 NaTNone 等缺失值,pandas.to_datetime() 会自动处理。

import pandas as pd

date_strs = ['2024-12-20', None, '2024-12-22']
dates = pd.to_datetime(date_strs)
print(dates)
# 输出:
# DatetimeIndex(['2024-12-20', 'NaT',
# '2024-12-22'], dtype='datetime64[ns]', freq=None)

推荐文档

相关文档

大家感兴趣的内容

随机列表