日期格式转换不外乎就是日期格式-字符串格式-数值格式之间的相互转换,以及相同格式的不同形式间的转换,最常用的是datetime模块
一、日期时间格式转字符
首先获取当天日期
from datetime import datetime
today = datetime.today()
print(today)
#datetime.datetime(2018, 9, 8, 22, 32, 46)
返回结果分别包含年月日时分秒,代表当前的日期时间,这是最常见的日期时间格式,在DataFrame的显示形式是“2018-09-08 22:32:46”,假如我们要把日期转换为字符串形式“2018-09-08”或“20180908”等,就要用到datetime的内置strftime函数。
today.strftime('%Y-%m-%d')
#'2018-09-08'
today.strftime('%Y%m%d')
#'20180908'
today.strftime('%Y-%m')
#'2018-09'
二、字符转日期时间
第一种方法用datetime模块的strptime函数:
datetime.strptime('2018-09-08','%Y-%m-%d')
#datetime.datetime(2018, 9, 8, 0, 0)
strptime函数接受两个参数,第一个是要转换的字符串日期,第二个是日期时间的格式化形式。
第二种方法可以借助pandas模块里面的to_datetime函数:
import pandas as pd
pd.to_datetime('2018-09-08')
#Timestamp('2018-09-08 00:00:00')
pd.to_datetime('201909',format='%Y%m')
#Timestamp('2019-09-01 00:00:00')
to_datetime函数常用的参数有两个,第一个是要转换的字符日期时间格式,第二个是该字符日期时间的格式化形式,对于简单的时间格式第二个参数format可以省略,to_datetime会自动识别,复杂一点的时间格式需要指定format。
三、数值转日期
这种情况一般发生在,数据库或者我们导入Python的数据该日期时间字段是以数值格式储存的,这时需要把它转为日期时间格式以方便后续的应用。
数值转日期只需先把数值转换为字符,再用上面介绍的字符转日期处理就可以了。
dt = 20180908
datetime.strptime(str(dt),'%Y%m%d')
#datetime.datetime(2018, 9, 8, 0, 0)
四、pandas中的时间处理
首先,我们构造一个简单的数据示例 df
import random
df = pd.DataFrame({
'some_data' : [random.randint(100,999) for i in range(1,10)],
'a_col' : '2019-07-12',
'b_col' : datetime.datetime.now().date(),
'c_col' : time.time()},
index=range(1,10))
查看它的数据类型
some_data 9 non-null int64
a_col 9 non-null object
b_col 9 non-null object
c_col 9 non-null float64
如何转换为 pandas 自带的 datetime 类型
# 字符串类型转换为 datetime64[ns] 类型
df['a_col'] = pd.to_datetime(df['a_col'])
# datetime.date 类型转换为 datetime64[ns] 类型
df['b_col'] = pd.to_datetime(df['b_col'])
# 时间戳(float) 类型转换为 datetime64[ns] 类型
df['c_col'] = pd.to_datetime(df['c_col'].apply(lambda x:time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(x))))
这里还遇到了一个将默认int64格式转化为datetime64[M]
df['order_dt']=pd.to_datetime(df.order_dt,format="%Y%m%d")
df['month']=df.order_dt.values.astype('datetime64[M]')
转载自https://blog.csdn.net/sinat_30715661/article/details/82534033
详细内容请看https://zhuanlan.zhihu.com/p/84582834
网友评论