Python-datetime库中datetime与numpy库中datetime的转换

25 篇文章 0 订阅
18 篇文章 3 订阅

目前要用到pandas处理数据,在获取到日期时间的时候,默认是numpy.datetime64的。

但是这个类型,是无法直接获取到年月日的,所以弄起来特别麻烦。

所以,我们要把这个类型转换成 datetime库中的datetime!

在网上找了转换的方式,大都是这样的:

1、是直接使用 astype 转换 

import datetime
import numpy as np

dt = datetime.datetime(2019, 7, 16)
dt1 = np.datetime64(dt)

dt6 = dt1.astype(datetime.datetime) # 这里 dt1 就是 numpy.detatime64 的类型
print(dt6, type(dt6))

#打印结果
    2019-07-16 00:00:00 <class 'datetime.datetime'>

2、先转换成timestamp,然后再转成datetime

import datetime
import numpy as np

dt = datetime.datetime(2019, 7, 16)
dt1 = np.datetime64(dt)

dt7 = (dt1-np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's') #转成timestamp
dt8 = datetime.datetime.utcfromtimestamp(dt7) #转datetime
print(dt8, type(dt8))

#打印结果
    /Users/guojicheng/Desktop/Python/3/Projects/DashCoffee/testApp.py:288:         
    DeprecationWarning: parsing timezone aware datetimes is deprecated; this will 
    raise an error in the future
    dt7 = (dt1-np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's')
    2019-07-16 00:00:00 <class 'datetime.datetime'>

虽然都能实现,可以我在编辑器中,一直提示我报错:

确实有点忍不了,然后去谷歌搜索,发现了一个新的方式:

import datetime
import numpy as np
import pandas as pd


dt = datetime.datetime(2019, 7, 16)
dt1 = np.datetime64(dt)

dt2 = pd.Timestamp(dt1) # 使用pandas里面的方法,转成pandas.timestamp类型
dt3 = datetime.datetime.utcfromtimestamp(dt2.timestamp()) #这是一种方式
print(dt3, type(dt3))
dt4 = dt2.to_pydatetime() # 这个最直接,还是调用他自己的方法
print(dt4, type(dt4))


# 所以只要这样就好了
dt2 = pd.Timestamp(dt1).to_pydatetime()

#打印结果
    2019-07-16 00:00:00 <class 'datetime.datetime'>
    2019-07-16 00:00:00 <class 'datetime.datetime'>

附:

 

2019.10.14补充:

date 转 datetime 的方法:

d = date.today()
print datetime.fromordinal(d.toordinal()) # 如果是在pandas里面使用这个比较好
print datetime(d.year, d.month, d.day) # 一般情况用的是这种
print datetime.combine(d, datetime.min.time())
print datetime(*d.timetuple()[:-4])

 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏小败在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值