Python数据分析常用语句(二)——时间格式处理

本节介绍python的时间格式处理。

(一)三个常用的时间格式转换函数

(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')))

输出为:
在这里插入图片描述
(2)strptime:按照特定时间格式将字符串转换为时间类型。

print(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')))

输出为:
在这里插入图片描述

(二)时间格式转换案例

引入时间格式处理包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。

(1)对字符串格式的时间处理方法

# 日期格式去除划线且去除日和月的十分位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)

在这里插入图片描述

(2)另一种对字符串格式的时间处理方法

# 对字符串格式的时间做处理
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)

在这里插入图片描述

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

在这里插入图片描述

(三)时间切片

(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条样本符合时间切片要求。
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值