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

目前要用到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 

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 

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

Python-datetime库中datetime与numpy库中datetime的转换_第1张图片

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

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 
    2019-07-16 00:00:00 

附:

Python-datetime库中datetime与numpy库中datetime的转换_第2张图片

 

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])

 

你可能感兴趣的:(Python,Pandas,Python学习记录)