首页 > 编程笔记 > Python笔记 阅读:3

Pandas to_datetime()的用法(附带实例)

在日常工作中,有一件非常麻烦的事就是处理多种表达格式的日期数据。同样是 2024 年 2 月 14 日,可以有很多种格式,如下图所示:


图 1 日期的多种格式

对此,我们需要先将格式统一,然后才能进行后续的工作。Pandas 提供了 to_datetime() 方法,可以帮助我们解决这一问题。

to_datetime() 方法可以用来实现批量日期数据转换,对于处理大数据非常实用和方便,它可以将日期数据转换成我们需要的各种格式。例如,将 2/14/24 和 14~2024 转换为日期格式 2024-02-14。

to_datetime() 方法的语法格式如下:
pandas.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=False, format=None, exact=None, unit=None, infer_datetime_format=None, origin='unix', cache=True)

to_datetime() 方法返回日期时间,各个参数的含义见下表:

参数 说明
arg 整型、浮点型、字符串、日期时间、列表、组、字符串数组、Series 对象、DataFrame 等。
errors 值为 ignore、raise 或 coerce,具体说明如下:
  • ignore:无效的解析将返回原值。
  • raise:无效的解析将引发异常。
  • coerce:无效的解析将被设置为 NaT,即无法转换为日期的数据将被转换为 NaT 值。
dayfirst 布尔值,默认值为 False,如果 arg 参数是字符串或列表,则指定日期解析顺序;如果参数值为 True,则按日期优先解析数据,例如将 10/11/23 解析为 2023-11-10。
yearfirst 布尔值,默认值为 False,如果 arg 参数是字符串或列表,则指定解析顺序;如果参数值为 True,则按年份优先解析数据,例如将 10/11/23 解析为 2010-11-23。如果 dayfirst 参数和 yearfirst 参数的值都为 True,则按年份优先解析数据。
format 字符串,格式化显示时间,例如“%d/Y%m/%”,注意“%f”将被解析为 ns。另外,参数值也可以指定为“ISO8601”和“mixed”,“ISO8601”表示解析任何 ISO8601 时间字符串,“mixed”表示单独推断每个元素的格式,一般同 dayfirst 参数一起使用。
unit 默认值为ns,表示时间的单位,如 D、s、ms、μs、ns,整数或浮点数。

【实例】将表示 2024 年 2 月 14 日的各种字符串日期转换为指定日期格式,程序代码如下:
# 导入pandas模块
import pandas as pd

# 解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)

# 创建各种格式的字符串日期
df=pd.DataFrame({'原日期':['14-Feb-FEB-24', '02/14/2024', '2024.02.14', '2024/02/14', '20240214'}]

# 转换日期
df['转换后的日期']=pd.to_datetime(df['原日期'],format='mixed')
print(df)
运行程序,结果如下图所示:
           原日期       转换后的日期
0       14-Feb-24         2024-02-14
1      02/14/2024         2024-02-14
2      2024.02.14         2024-02-14
3      2024/02/14         2024-02-14
4        20240214         2024-02-14

注意,使用 to_datetime() 方法转换日期时,如果日期数据的格式不统一,那么需要指定 format 参数值为 mixed。让 Python 自动推断日期格式。否则,程序将会出现警告信息。

to_datetime() 方法还可以实现将 DataFrame 对象中的多列,如单独的年、月、日列,组合成一列日期。键值是常用的日期缩略语。组合的必选参数为 year、month、day,可选参数为 hour、minute、second、millisecond(毫秒)、microsecond(微秒)、nanosecond(纳秒)。

【实例】将一组数据组合为日期数据,主要代码如下:
df = pd.DataFrame({'year': [2018, 2019, 2020],
    'month': [1, 3, 2],
    'day': [4, 5, 14],
    'hour': [13, 8, 2],
    'minute': [23, 12, 14],
    'second': [2, 4, 0]})
df['组合后的日期']=pd.to_datetime(df)
print(df)
运行程序,结果为:
     year  month  day  hour  minute  second        组合后的日期
0    2022      1    4    13     23       2  2022-01-04 13:23:02
1    2023      3    5     8     12       4  2023-03-05 08:12:04
2    2024      2   14     2     14       0  2024-02-14 02:14:00

相关文章