问题的提出:
两个dataframe中的时间数据为datetime64格式,在进行merge操作可能提醒如下错误:
求解思路:
- datetime64格式在dataframe中是什么样的角色?
- 如何使得两个datetime64数据可以对比?
datetime64格式原生于Numpy库,因此在pandas中并不支持直接的数值比较,这是造成上述报错的原因。
而在pandas中常用的时间数据类型分别为:Timestamp、Period和Timedelta时间对象
(1)Timestamp
表示时间戳数据,其从Python标准库的datetime类继承过来的,表示时间轴上的一个时刻,可进行不同时区的转换。
对于诸如 ‘2019-12-06’ 这样的可是别字符串数据,载入pandas后会默认转换为Timestamp对象
now=pd.Timestamp.now() # 获取当前时间时间戳
now.tz_localize("Asia/Shanghai") # 将当前时间转换为指定时区的时间
pd.Timestamp('2019-12-06 11:00:30') # 定义任意时间的时间戳
(2)Period
表示时间段。如某年、某月、某日、某小时等,其时间的长短由freq参数决定。
now_day=pd.Period.now(freq="D") # 当前天的时间段
now_day.start_time # period对象的开始时间
now_day.end_time # period对象的终止时间
(3) Timedelta
表示Timestamp间的时间间隔,其可和Timestamp直接进行加减运算。
因此,解决上述问题的核心在于将datetime64数据转换为可为pandas直接对比的数据类型。
一种方案为:将datetime64转换为可操作的Timestamp:
pd.to_datetime(datetime64_obj)
但更常见的做法是:将datetime64转换为字符串数据
df['col'].apply(str)