python pd.to_datetime

python pd.to_datetime

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中的一列)转换为日期时间对象。

该方法的主要语法如下:

pd.to_datetime(arg, format=None, errors='raise', dayfirst=False, yearfirst=False, exact=True, unit=None, infer_datetime_format=False, origin='unix', cache=True)
Python

参数说明:

  • 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方法最常见的用法之一是将字符串转换为日期时间类型。下面是一个简单示例:

import pandas as pd

date_str = '2021-09-30'
date = pd.to_datetime(date_str)
print(date)
Python

输出如下:

2021-09-30 00:00:00
Python

在上述示例中,我们将一个字符串2021-09-30转换为日期时间对象。通过调用pd.to_datetime(date_str),我们得到了一个Timestamp类型的对象,表示日期时间2021-09-30 00:00:00

将多个字符串转换为日期时间对象

除了单个字符串,to_datetime方法还可以将多个字符串转换为日期时间对象。在这种情况下,to_datetime方法将返回一个包含多个日期时间对象的Series。下面是一个示例:

import pandas as pd

date_strs = ['2021-09-30', '2021-10-01', '2021-10-02']
dates = pd.to_datetime(date_strs)
print(dates)
Python

输出如下:

0   2021-09-30
1   2021-10-01
2   2021-10-02
dtype: datetime64[ns]
Python

在上述示例中,我们传入一个包含多个日期字符串的列表,to_datetime方法返回了一个包含对应的日期时间对象的Series。每个日期时间对象都有一个唯一的索引值。

指定日期时间格式

to_datetime方法会自动尝试推断输入的日期时间格式,但也可以通过format参数手动指定。如果输入的日期时间格式与format指定的格式不符,将会抛出ValueError异常。下面是一个指定日期时间格式的示例:

import pandas as pd

date_str = '15-07-2021'
date = pd.to_datetime(date_str, format='%d-%m-%Y')
print(date)
Python

输出如下:

2021-07-15 00:00:00
Python

在上述示例中,我们将一个字符串15-07-2021转换为日期时间对象,并通过format参数指定了输入字符串的日期时间格式。由于输入字符串的格式与指定的格式相符,转换成功。

日期时间格式的错误处理

to_datetime方法的errors参数用于指定错误处理的方式。默认情况下,如果遇到错误,to_datetime方法会抛出ValueError异常。但你也可以将errors参数设置为’ignore’,以忽略错误并返回输入数据本身。另外,如果将errors参数设置为’coerce’,则无法解析的日期将被置为NaT(Not a Time),并返回一个缺失值。下面是一些列子:

import pandas as pd

date_strs = ['2021-09-30', '2021-10-01', '2021-10-abc']

# raise异常
dates = pd.to_datetime(date_strs)
print(dates)

# ignore错误
dates = pd.to_datetime(date_strs, errors='ignore')
print(dates)

# coerce错误
dates = pd.to_datetime(date_strs, errors='coerce')
print(dates)
Python

输出如下:

0   2021-09-30
1   2021-10-01
2   NaT
dtype: datetime64[ns]

['2021-09-30' '2021-10-01' '2021-10-abc']

0   2021-09-30
1   2021-10-01
2          NaT
dtype: datetime64[ns]
Python

第一个示例中,to_datetime方法遇到了格式不匹配的日期字符串2021-10-abc,导致抛出了ValueError异常。这是因为errors参数的默认值为’raise’。

第二个示例中,我们将errors参数设置为’ignore’,to_datetime方法忽略了格式不匹配的日期字符串,并返回了原始的字符串列表。

第三个示例中,我们将errors参数设置为’coerce’,to_datetime方法将无法解析的日期字符串替换为NaT,表示缺失值。这在某些情况下很有用,比如在数据分析过程中需要处理不完整或无效的日期数据。

处理多维数组

除了处理单个日期字符串或字符串列表外,to_datetime方法还可以处理多维数组,并将其转换为包含多个日期时间对象的DataFrame。下面是一个处理多维数组的示例:

import pandas as pd
import numpy as np

date_array = np.array(['2021-09-30', '2021-10-01', '2021-10-02'])
value_array = np.array([1, 2, 3])

df = pd.DataFrame({'date': pd.to_datetime(date_array), 'value': value_array})
print(df)
Python

输出如下:

        date  value
0 2021-09-30      1
1 2021-10-01      2
2 2021-10-02      3
Python

在上述示例中,我们使用NumPy的array函数创建了一个包含日期字符串和对应数值的多维数组。通过调用pd.to_datetime(date_array),我们将日期字符串数组转换为日期时间对象。然后,我们使用这些日期时间对象和数值数组创建了一个DataFrame对象。

更多用法示例

将整数转换为日期时间

除了字符串,to_datetime方法还可以将整数数据转换为日期时间对象。通常情况下,整数数据表示从某个基准时间点开始的时间间隔(例如:秒数、毫秒数等),to_datetime方法可以根据指定的origin参数将其转换为日期时间对象。下面是一个示例:

import pandas as pd

time_seconds = 1632968400
timestamp = pd.to_datetime(time_seconds, unit='s', origin='unix')
print(timestamp)
Python

输出如下:

2021-09-30 08:33:20
Python

在上述示例中,我们将整数时间戳1632968400转换为日期时间对象,并通过unit参数指定时间戳的单位为秒(’s’),通过origin参数指定时间戳的基准原点为unix时间戳。

使用dayfirst和yearfirst参数

在某些国家和地区,日期的格式中天和年的位置可能与默认格式不同。在这种情况下,可以使用dayfirst和yearfirst参数来指定日期字符串的格式。下面是一个示例:

import pandas as pd

date_str = '01-02-2019'
date1 = pd.to_datetime(date_str, dayfirst=False)
date2 = pd.to_datetime(date_str, dayfirst=True)

print(date1)
print(date2)
Python

输出如下:

2019-01-02 00:00:00
2019-02-01 00:00:00
Python

在上述示例中,我们使用日期字符串01-02-2019,默认情况下,to_datetime方法将月份解释为天。通过将dayfirst参数设置为False和True,我们分别指定了日期字符串的格式。

推断日期时间格式

to_datetime方法默认情况下会尝试推断输入数据的日期时间格式。这对于处理多种不同的日期时间格式非常有用。下面是一个示例:

import pandas as pd

date_strs = ['2021-09-30', '2021/10/01', '2021|10|02']
dates = pd.to_datetime(date_strs, infer_datetime_format=True)
print(dates)
Python

输出如下:

0   2021-09-30
1   2021-10-01
2   2021-10-02
dtype: datetime64[ns]
Python

在上述示例中,我们传入包含多种不同日期格式的字符串列表。通过将infer_datetime_format参数设置为True,to_datetime方法推断出输入数据的日期时间格式,并成功地将其转换为日期时间对象。

结论

本文详细介绍了pandas库中的to_datetime方法的使用方法和一些常见的用法示例。通过to_datetime方法,可以方便地将字符串、整数等类型的数据转换为pandas的日期时间对象。无论是处理单个日期字符串还是处理多维数组,to_datetime方法都能提供简便而灵活的日期时间处理功能。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册