如何将DataFrame中datetime64类型的时间戳列转为数值?
将DataFrame的datetime时间戳列转换为数值类型的方法
嗨,针对你这个需求,我整理了几种实用的方法来把df里datetime64类型的Time列转换成数值类型:
方法1:直接转换为底层整数表示(纳秒级)
Pandas的datetime64类型底层是用int64存储的,对应从1970-01-01 00:00:00 UTC开始的纳秒数。你可以直接用astype()转换:
# 添加新列存储数值化的时间戳 df['Time_numeric'] = df['Time'].astype('int64')
转换后Time_numeric列会是类似1526323200000000000这样的大整数。
如果想要更常用的秒级时间戳,只需要把纳秒数除以10^9即可:
df['Time_seconds'] = df['Time'].astype('int64') // 10**9
这样得到的就是从epoch时间开始的秒数,比如1526323200。
方法2:使用view()查看底层数值
和astype()效果类似,view()可以直接读取datetime的底层int64存储值:
df['Time_numeric'] = df['Time'].view('int64')
方法3:计算相对时间的数值(自定义基准)
如果不需要epoch时间戳,而是想要相对于某个起始点的时间差数值(比如秒、分钟),可以先计算时间差再转换:
# 以数据中的最早时间为基准 start_time = df['Time'].min() # 计算每个时间点距离起始时间的总秒数 df['Time_since_start'] = (df['Time'] - start_time).dt.total_seconds()
比如你的数据里第一个时间是2018-05-15 00:00:00,那么第二个时间2018-05-15 00:15:00对应的数值就是900(15分钟=900秒)。
示例转换后的DataFrame
用方法1转换后,你的df会变成这样:
Time Count Time_numeric Time_seconds 0 2018-05-15 00:00:00 4 1526323200000000000 1526323200 1 2018-05-15 00:15:00 1 1526324100000000000 1526324100 2 2018-05-15 00:30:00 5 1526325000000000000 1526325000 ...
内容的提问来源于stack exchange,提问作者Kavita
相关产品推荐
相关产品推荐

