python pd.to_datetime
引言
在数据处理和分析过程中,经常会遇到日期和时间的处理问题。而在使用Python编程语言进行数据分析时,pandas库是一个非常常用的工具。pandas库中的to_datetime方法提供了一个方便的方式,可以将字符串、浮点数等类型的数据转换为日期时间类型,从而方便地进行日期时间的计算和分析。本文将详细介绍pandas中的to_datetime方法的使用以及一些常见的用法示例。
什么是pd.to_datetime方法?
pd.to_datetime是pandas库中的一个函数,用于将给定的输入转换为pandas的日期时间类型(Timestamp)。它能够自动推断输入的格式,并将其转换为对应的日期时间对象。to_datetime方法的使用非常灵活,既可以将单个日期字符串转换为日期时间对象,也可以将一个Series(一维数组,例如DataFrame中的一列)转换为日期时间对象。
该方法的主要语法如下:
参数说明:
- arg:要转换为日期时间的输入,可以是字符串、整数、浮点数、列表或多维数组等。
- format:指定输入数据的日期时间格式,如果不指定,则由pandas库自动推断。
- errors:指定错误处理方式,可选值为’raise’、’ignore’和’coerce’,默认为’raise’,表示遇到错误时抛出异常。
- dayfirst、yearfirst:指定输入数据的日期格式中,天和年的位置,用于区分‘01/02/2019’和‘02/01/2019’这两种不同格式的日期。默认情况下,认为月份在前。
- exact:是否精确匹配日期格式。默认情况下,如果日期字符串与format指定的格式相符,则转换成功。如果exact为False,则只要字符串中包含指定的日期格式,就会转换成功。
- unit:指定转换后的日期时间的单位。默认为None,表示转换为具有纳秒精度的日期时间对象。
- infer_datetime_format:是否尝试推断输入的日期时间格式,默认为False。当传入格式的数量大于10个时,推断的效果不佳。
- origin:指定时间戳的基准原点,用于将给定的整数数据转换为日期时间。默认为’unix’,表示从1970年1月1日开始计算。
- cache:是否缓存已处理的日期格式,默认为True。
to_datetime方法的基本用法
将字符串转换为日期时间对象
to_datetime方法最常见的用法之一是将字符串转换为日期时间类型。下面是一个简单示例:
输出如下:
在上述示例中,我们将一个字符串2021-09-30
转换为日期时间对象。通过调用pd.to_datetime(date_str)
,我们得到了一个Timestamp类型的对象,表示日期时间2021-09-30 00:00:00
。
将多个字符串转换为日期时间对象
除了单个字符串,to_datetime方法还可以将多个字符串转换为日期时间对象。在这种情况下,to_datetime方法将返回一个包含多个日期时间对象的Series。下面是一个示例:
输出如下:
在上述示例中,我们传入一个包含多个日期字符串的列表,to_datetime方法返回了一个包含对应的日期时间对象的Series。每个日期时间对象都有一个唯一的索引值。
指定日期时间格式
to_datetime方法会自动尝试推断输入的日期时间格式,但也可以通过format参数手动指定。如果输入的日期时间格式与format指定的格式不符,将会抛出ValueError异常。下面是一个指定日期时间格式的示例:
输出如下:
在上述示例中,我们将一个字符串15-07-2021
转换为日期时间对象,并通过format参数指定了输入字符串的日期时间格式。由于输入字符串的格式与指定的格式相符,转换成功。
日期时间格式的错误处理
to_datetime方法的errors参数用于指定错误处理的方式。默认情况下,如果遇到错误,to_datetime方法会抛出ValueError异常。但你也可以将errors参数设置为’ignore’,以忽略错误并返回输入数据本身。另外,如果将errors参数设置为’coerce’,则无法解析的日期将被置为NaT(Not a Time),并返回一个缺失值。下面是一些列子:
输出如下:
第一个示例中,to_datetime方法遇到了格式不匹配的日期字符串2021-10-abc
,导致抛出了ValueError异常。这是因为errors参数的默认值为’raise’。
第二个示例中,我们将errors参数设置为’ignore’,to_datetime方法忽略了格式不匹配的日期字符串,并返回了原始的字符串列表。
第三个示例中,我们将errors参数设置为’coerce’,to_datetime方法将无法解析的日期字符串替换为NaT,表示缺失值。这在某些情况下很有用,比如在数据分析过程中需要处理不完整或无效的日期数据。
处理多维数组
除了处理单个日期字符串或字符串列表外,to_datetime方法还可以处理多维数组,并将其转换为包含多个日期时间对象的DataFrame。下面是一个处理多维数组的示例:
输出如下:
在上述示例中,我们使用NumPy的array函数创建了一个包含日期字符串和对应数值的多维数组。通过调用pd.to_datetime(date_array),我们将日期字符串数组转换为日期时间对象。然后,我们使用这些日期时间对象和数值数组创建了一个DataFrame对象。
更多用法示例
将整数转换为日期时间
除了字符串,to_datetime方法还可以将整数数据转换为日期时间对象。通常情况下,整数数据表示从某个基准时间点开始的时间间隔(例如:秒数、毫秒数等),to_datetime方法可以根据指定的origin参数将其转换为日期时间对象。下面是一个示例:
输出如下:
在上述示例中,我们将整数时间戳1632968400
转换为日期时间对象,并通过unit参数指定时间戳的单位为秒(’s’),通过origin参数指定时间戳的基准原点为unix时间戳。
使用dayfirst和yearfirst参数
在某些国家和地区,日期的格式中天和年的位置可能与默认格式不同。在这种情况下,可以使用dayfirst和yearfirst参数来指定日期字符串的格式。下面是一个示例:
输出如下:
在上述示例中,我们使用日期字符串01-02-2019
,默认情况下,to_datetime方法将月份解释为天。通过将dayfirst参数设置为False和True,我们分别指定了日期字符串的格式。
推断日期时间格式
to_datetime方法默认情况下会尝试推断输入数据的日期时间格式。这对于处理多种不同的日期时间格式非常有用。下面是一个示例:
输出如下:
在上述示例中,我们传入包含多种不同日期格式的字符串列表。通过将infer_datetime_format参数设置为True,to_datetime方法推断出输入数据的日期时间格式,并成功地将其转换为日期时间对象。
结论
本文详细介绍了pandas库中的to_datetime方法的使用方法和一些常见的用法示例。通过to_datetime方法,可以方便地将字符串、整数等类型的数据转换为pandas的日期时间对象。无论是处理单个日期字符串还是处理多维数组,to_datetime方法都能提供简便而灵活的日期时间处理功能。