Pandas 如何将带空值的字符串转换为日期时间

Pandas 如何将带空值的字符串转换为日期时间

在本文中,我们将介绍如何使用Python和Pandas将带有空值的字符串转换为日期时间。计算机处理日期和时间的最佳方法是将其转换为日期时间对象。然而,当我们从数据集中读取日期时间信息时,经常会遇到空值,因此需要一些特殊的处理。

我们将使用两种主要方法来解决这个问题:第一种方法是使用pandas.to_datetime()函数,并在转换过程中指定错误处理方式。第二种方法是使用Python的datetime.datetime.strptime()函数,并在将字符串转换为日期时间对象时进行手动错误处理。

阅读更多:Pandas 教程

使用pandas.to_datetime()函数

Pandas中的to_datetime()函数可以将日期字符串转换为日期时间对象,并有一个可选参数“ errors”,该参数指定如何处理错误。可用的选项是“ raise”(默认值),“ coerce”和“ ignore”。

当设置为“ raise”时,任何无效的日期字符串都会引发ValueError。当设置为“ coerce”时,任何无效的日期字符串都会用NaT(不可用时间的缩写)替换为缺失值。当设置为“ ignore”时,任何无效的日期字符串都将保留为字符串。

下面是一个示例应用该方法:

import pandas as pd
import numpy as np

dates = pd.Series(['2018-01-01', '2018-01-02', np.nan, '2018-01-04'])
df = pd.DataFrame({'date': dates})

# 默认情况下,使用pandas.to_datetime()函数会引发错误
try:
    df['datetime'] = pd.to_datetime(df['date'])
except ValueError as e:
    print('ValueError:', e)

# 使用参数errors='coerce'将错误转换为缺失值
df['datetime'] = pd.to_datetime(df['date'], errors='coerce')
print(df)
Python

输出:

     date   datetime
0 2018-01-01 2018-01-01
1 2018-01-02 2018-01-02
2 NaN NaT
3 2018-01-04 2018-01-04
Python

在此示例中,我们使用pandas.DataFrame构造函数创建数据帧,并使用pandas.Series构造函数创建包含日期字符串的Series。然后,将该Series添加到数据帧中,并尝试将其转换为日期时间对象。由于字符串中包含一个空值,因此默认设置引发了ValueError。然后,我们将errors参数设置为’coerce’,告诉函数将任何无效的日期字符串替换为NaN。

使用datetime.datetime.strptime()函数

另一种将日期字符串转换为日期时间对象的方法是使用Python的datetime模块中的datetime.datetime.strptime()函数。此函数需要两个参数:一个表示日期字符串的字符串和一个表示日期格式的字符串。在将字符串转换为日期时间对象时,需要使用格式字符串指定日期字符串中各个元素的位置。

以下是一个应用该方法的示例:

from datetime import datetime

dates = ['2018-01-01', '2018-01-02', None, '2018-01-04']
for date in dates:
    if date:
        datetime_obj = datetime.strptime(date, '%Y-%m-%d')
        print(type(datetime_obj), datetime_obj)
    else:
        print(type(date), date)
Python

输出:

<class 'datetime.datetime'> 2018-01-01 00:00:00
<class 'datetime.datetime'> 2018-01-02 00:00:00
<class 'NoneType'> None
<class 'datetime.datetime'> 2018-01-04 00:00:00
Python

在此示例中,我们遍历一个包含日期字符串和空值的列表并使用datetime.datetime.strptime()将每个非空字符串转换为日期时间对象。我们还在格式字符串中使用了“% Y”来指定年份的位置,“% m”来指定月份的位置,“% d”来指定日期的位置,从而告诉函数如何将字符串转换为日期时间对象。

对于空值,我们将其作为原样保留,并在输出结果中将其类型更改为“NoneType”。

总结

通过这篇文章,我们学习了如何使用Python和Pandas将带有空值的日期字符串转换为日期时间对象。我们学习了两种方法:使用pandas.to_datetime()函数和使用Python的datetime.datetime.strptime()函数。在转换过程中,我们遇到了无效的日期字符串,需要使用错误处理机制进行处理,以确保转换成功。这些方法可以帮助我们在处理时间序列数据时更好地处理空值和缺失数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册