01、三个常用的时间格式转换函数
1、strftime:格式化为一个时间字符串。
print(pd.to_datetime('2017-6-30').strftime('%Y-%m-%d'))
print(type(pd.to_datetime('2017-6-30').strftime('%Y-%m-%d')))
输出为:
rint(datetime.datetime.strptime('2017-6-30','%Y-%m-%d'))
print(type(datetime.datetime.strptime('2017-6-30','%Y-%m-%d')))
输出为:
3、pd.to_datetime() :转换为时间格式类型。
print(pd.to_datetime('2017-6-30'))
print(type(pd.to_datetime('2017-6-30')))
输出为:
02、时间格式转换案例
引入时间格式处理包datetime。
import numpy as np
import pandas as pd
import datetime
读取案例数据:
data = pd.read_csv('data_time.csv')
print(data.shape)
data.head(3)
数据为:
data['appl_time'].dtypes
将其统一为字符串格式:
data['appl_time'] = data['appl_time'].map(str)
data['appl_time'].dtypes
1、字符串格式表示的时间
# 字符串格式表示的时间
data['time_1']=data.appl_time.apply(lambda x: pd.to_datetime(x).strftime('%Y-%m-%d'))
print(data['time_1'].dtypes)
data.head(3)
2、时间格式表示的时间
data['time_2']=data.appl_time.apply(lambda x: pd.to_datetime(x))
print(data['time_2'].dtypes)
data.head(3)
# 时间格式的时间
data['time_3'] = pd.to_datetime(data['appl_time'])
print(data['time_3'].dtypes)
data.head(3)
3、另一种时间格式表示的时间
data['time_4']=data.appl_time.apply(lambda x: datetime.datetime.strptime(x,'%Y/%m/%d'))
print(data['time_4'].dtypes)
data.head(3)
4、特殊日期格式处理
日期格式去除划线且去除日和月的十分位0,例如2019-06-15处理后2019615。
①、对字符串格式的时间处理方法
# 日期格式去除划线且去除日和月的十分位0,例如2019-06-15处理后是2019615
# 对字符串格式的时间做处理,因为是for循环,处理时间较长
data['DATE_year'] = data['time_1'].map(lambda x: x[:4])
data['DATE_month'] = data['time_1'].map(lambda x: x[5:7])
data['DATE_day'] = data['time_1'].map(lambda x: x[8:])
for i in range(data.shape[0]):
if data.loc[i,'DATE_month'][0] == '0':
data.loc[i,'DATE_month'] = data.loc[i,'DATE_month'][1]
if data.loc[i,'DATE_day'][0] == '0':
data.loc[i,'DATE_day'] = data.loc[i,'DATE_day'][1]
data['time_5'] = data[['DATE_year','DATE_month','DATE_day']].apply(lambda x: (x[0]+x[1]+x[2]), axis = 1)
data = data.drop(['DATE_year','DATE_month','DATE_day'],axis=1)
print(data['time_5'].dtypes)
data.head(3)
②、另一种对字符串格式的时间处理方法
# 对字符串格式的时间做处理
data['DATE_year'] = data['time_1'].map(lambda x: datetime.datetime.strptime(x,'%Y-%m-%d').year)
data['DATE_month'] = data['time_1'].map(lambda x: datetime.datetime.strptime(x,'%Y-%m-%d').month)
data['DATE_day'] = data['time_1'].map(lambda x: datetime.datetime.strptime(x,'%Y-%m-%d').day)
data['time_6'] = data[['DATE_year','DATE_month','DATE_day']].apply(lambda x: (str(x[0])+str(x[1])+str(x[2])), axis = 1)
data = data.drop(['DATE_year','DATE_month','DATE_day'],axis=1)
print(data['time_6'].dtypes)
data.head(3)
③、对时间格式的时间处理方法
# 对时间格式的时间做处理
data['DATE_year'] = data['time_2'].map(lambda x: x.year)
data['DATE_month'] = data['time_2'].map(lambda x: x.month)
data['DATE_day'] = data['time_2'].map(lambda x: x.day)
data['time_7'] = data[['DATE_year','DATE_month','DATE_day']].apply(lambda x: (str(x[0])+str(x[1])+str(x[2])), axis = 1)
data = data.drop(['DATE_year','DATE_month','DATE_day'],axis=1)
print(data['time_7'].dtypes)
data.head(3)
03、时间切片
1、表示大于某个时间点的时间切片。
data_larger_20170101 = data[data['time_2']> pd.to_datetime('2017-01-01')]
print(data_larger_20170101.shape)
data_larger_20170101.head(3)
输出结果显示有77条样本符合条件。
2、由回溯时间往前推一年(360天),在衍生变量时常用到这个方法。
back_time = pd.to_datetime('2017-6-30') # 回溯时间
data_360 = data[(data['time_2']<= back_time)&\
(data['time_2']> (back_time + datetime.timedelta(-360)))]
print(data_360.shape)
data_360.head(3)
输出结果显示有88条样本符合时间切片要求。
全文完,感谢您的耐心阅读 ~