pandas中datetime64列的merge操作

问题的提出:
两个dataframe中的时间数据为datetime64格式,在进行merge操作可能提醒如下错误:
在这里插入图片描述
求解思路:

  1. datetime64格式在dataframe中是什么样的角色?
  2. 如何使得两个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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值