Pandas 的 to_datetime()
时间转换使用及学习心得
Pandas 是 Python 下一个非常常用的数据处理库,to_datetime()
方法是 Pandas 中处理日期时间数据的重要方法之一。它可以将字符串、时间戳等格式的时间数据转换为 Pandas 中的日期时间格式,并且支持多种 datetime 格式的识别,极大地增强了 Pandas 的灵活性。本文将详细介绍 to_datetime()
的各种用法和注意事项。
使用方法
基础使用
首先,需要将 Pandas 库导入:
import pandas as pd
然后就可以使用 pd.to_datetime()
方法将传入的数据转换为 Pandas 中的日期时间格式了。例如:
date_list = ['2021-09-01', '2021-09-02', '2021-09-03']
date_list_dt = pd.to_datetime(date_list)
print(date_list_dt)
输出为:
DatetimeIndex(['2021-09-01', '2021-09-02', '2021-09-03'], dtype='datetime64[ns]', freq=None)
pd.to_datetime()
方法的默认格式是 %Y-%m-%d
,该方法会将传入的字符串转换为 Pandas 中的 Timestamp
格式。当传入一个列表时,该方法会将列表中的每一个元素都转换为 Timestamp
类型,并返回一个 DatetimeIndex
类型的 Pandas 对象。
复杂格式转换
pd.to_datetime()
还支持多种时间格式的转换。例如,对于以下字符串时间格式:
datetime_list = ['7/6/2022 10:25', '09-08-2022 12:30', '2022-07-04 16:45:35']
我们可以使用 pd.to_datetime()
方法将其转换为 Pandas 中的日期时间格式,方法如下:
datetime_list_dt = pd.to_datetime(datetime_list, format='%m/%d/%Y %H:%M', exact=False)
print(datetime_list_dt)
输出为:
DatetimeIndex(['2022-07-06 10:25:00', '2022-09-08 12:30:00',
'2022-07-04 16:45:35'],
dtype='datetime64[ns]', freq=None)
在上述例子中,我们加入了一个 format 参数。该参数用来指定输入的字符串时间格式,同时也支持多种时间格式的解析。例如,%m/%d/%Y %H:%M
分别对应了月份、日期、年份、小时和分钟。参数 exact
代表是否强制按照 format 指定的格式进行解析,如果不强制则会自动匹配类似的时间格式。
至此,我们已经学会了 Pandas 中 pd.to_datetime()
方法的基础使用和一个复杂的转换示例。
注意事项
超出时间范围的处理
Timestamp
类型表示的时间范围是有限的。具体来说,它的范围为 1677 年到 2262 年。在转换不在该范围的时间时会抛出 OutOfBoundsDatetime
异常,例如:
out_of_range_date = '2262-01-01 00:00:01'
out_of_range_date_dt = pd.to_datetime(out_of_range_date)
输出为:
OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 2262-01-01 00:00:01
多种日期时间格式的转换
pd.to_datetime()
方法支持多种日期时间格式的识别和转换,但这也意味着在传入非标准格式的日期时间字符串时可能会出现转换错误的问题。例如:
date_strings = ['2021-09-01 12:00:00', '2021-09-02']
wrong_format_date_strings = ['2021-09-01', '2021.09.02']
date_strings.extend(wrong_format_date_strings)
date_strings_dt = pd.to_datetime(date_strings)
print(date_strings_dt)
输出为:
DatetimeIndex(['2021-09-01 12:00:00', '2021-09-02 00:00:00',
'2021-09-01 00:00:00', '2021-09-02 00:00:00'],
dtype='datetime64[ns]', freq=None)
在上述例子中,我们故意将一些日期时间字符串传入错误的日期时间格式。由于 pd.to_datetime()
方法可以处理多种日期时间格式,它会尝试将这些错误的格式识别为日期时间格式,但结果并不是我们想要的。
因此,在使用 pd.to_datetime()
方法时,一定要清楚所要转换的日期时间格式,并传入正确的格式参数。
示例展示
示例1:处理多种日期时间格式的数据
一个常见的需求就是需要处理多种日期时间格式的数据。例如,我们有一个记录了销售日期和时间的数据集:
sales_data = pd.DataFrame({
'Timestamp': ['2022/06/06 12:00:00', '9/8/2022 8:05', '2022-05-03 13:10:05'],
'Price': [10.5, 5, 8.9]
})
其中,缺少了对应的时间格式。我们可以使用 pd.to_datetime()
方法将时间字符串转化为标准的时间戳格式:
sales_data['Timestamp'] = pd.to_datetime(sales_data['Timestamp'], format='%Y/%m/%d %H:%M:%S', exact=False, errors='coerce')
解释:
format='%Y/%m/%d %H:%M:%S'
表示将时间字符串格式化为标准的时间戳格式;exact=False
表示在多种时间格式中动态匹配;errors='coerce'
表示将无法转换的值设置为空值。
结果如下:
Timestamp Price
0 2022-06-06 12:00:00 10.5
1 2022-09-08 08:05:00 5.0
2 2022-05-03 13:10:05 8.9
示例2:从 csv 文件中读取日期时间格式的数据
在从数据文件中读取数据时,经常需要将时间戳转换为 Pandas 中的日期时间格式。例如,我们有一个 csv 文件,包含了用户的注册时间,格式如下:
user_id,register_time
1,2021-09-01 10:00:00
2,2021-09-02 13:01:23
3,2021-09-03 21:00:03
我们可以使用 Pandas 的 read_csv()
方法读取该 csv 文件,并且将 register_time
中的时间戳转换为 Pandas 中的日期时间格式。代码如下:
user_data = pd.read_csv('user_data.csv')
user_data['register_time'] = pd.to_datetime(user_data['register_time'], format='%Y-%m-%d %H:%M:%S')
print(user_data)
输出为:
user_id register_time
0 1 2021-09-01 10:00:00
1 2 2021-09-02 13:01:23
2 3 2021-09-03 21:00:03
总结
pd.to_datetime()
方法是 Pandas 处理日期时间数据的重要工具之一,适用于各种类型的日期时间格式转换。我们可以根据实际需求来设置转换格式和异常处理方式,使其更加贴合实际应用场景。同时,在使用该方法时要注意传入日期时间字符串的格式是否正确,避免转换错误。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas的to_datetime时间转换使用及学习心得 - Python技术站