日期时间数据的整理

日期时间类型是基本的数据类型,也是比较常见的数据类型之一。本章介绍日期时间类型数据的整理。[大谦Excel,dqexcel点com]

日期时间数据概述

Python有多个包支持日期时间类型的数据操作,如datetime包、time包和pandas包等。日期时间数据有时间点、时间段和时间差等多种类型。下面结合pandas包进行介绍。

pandas包中用时间戳表示时间点,时间戳一般是一个很大的数,表示1970年1月1日到指定时间点的纳秒数。一纳秒等于十亿分之一秒。时间段是以天、月、年、小时等为单位的一段时间。时间差则表示两个指定时间点之间的差值。

pandas包中可以用Series对象的astype方法将数据转换为日期时间数据。该方法的语法格式类似于:

code.python
ser.astype(dtype)

参数dtype用于指定要转换的数据类型。数据转换为日期时间数据,dtype参数的取值为:

  • 'datetime64':日期时间类型。
  • 'period[freq]':时间段类型,其中[freq]表示时间段的频率,如'D'表示天,'H'表示小时,'M'表示月等。
  • 'timedelta':时间差类型。

下面结合一个实例介绍将给定的表示日期时间的字符串转换为时间点、时间段和时间差。

图3-47所示工作表中,A1单元格在Python模式下在公式栏中输入代码:

code.python
ser=pd.Series(['2023-09-25','2023-09-26','2023-09-27'])
ser2=ser.astype('datetime64')

单击键盘上的Ctrl+Enter键,A1单元格返回一个Series对象。查看该对象的数组内容,如B1:B3单元格区域中所示,是3个日期对应的时间戳数据。以字符串形式展开,如C1单元格中所示,该Series对象中元素的数据类型为datetime64[ns]。ns表示纳秒。

A5单元格在Python模式下在公式栏中输入代码:

code.python
ser=pd.Series(['2023-09','2023-10','2023-11'])
ser2=ser.astype('period[M]')

单击键盘上的Ctrl+Enter键,A5单元格返回一个Series对象。以字符串形式展开,如B5单元格中所示,该Series对象中元素的数据类型为period[M]。M表示月。

A7单元格在Python模式下在公式栏中输入代码:

code.python
ser=pd.Series([1,2,3])
ser2=ser.astype('timedelta64[D]')

单击键盘上的Ctrl+Enter键,A7单元格返回一个Series对象。查看该对象的数组内容,如B7:B9单元格区域中所示,是3个元素对应的时间差数据。以字符串形式展开,如C7单元格中所示,该Series对象中元素的数据类型为timedelta64[ns]。ns表示纳秒。

Document Image

图3-47 将给定数据转换为日期时间数据

处理日期时间数据

下面结合一个实例介绍日期时间数据的处理。图3-48所示工作表中A-B列分别表示活动开始日期和活动终止日期,要求计算活动天数。C1单元格在Python模式下在公式栏中输入代码:

code.python
df=xl("A1:B7",headers=True)
ser=(df['活动终止日']-df['活动开始日'])/24/3600/1000000000

单击键盘上的Ctrl+Enter键,C1单元格返回一个Series对象。以Excel值的形式显示,如图3-48所示。注意代码中两个日期相减得到的是一个很大的数,单位是纳秒,需要将秒数转换为天数。一秒等于10亿纳秒。

Document Image

图3-48 计算活动天数