在python处理时间类型数据时,经常需要在时间,字符串类型中来回转换。
在实际业务场景中,本人时常会用到以下几个时间类型相关的函数:
1、字符型格式转为时间格式
①pd.to_datetime(arg,format)
该函数是pandas模块下,该函数可以将字符型的时间数据转换为datetime时间型数据。
②strptime(arg,format)
dataframe数据常和apply()函数结合来转化时间类型(series不能直接运用strptime来转换格式)
③注:
当利用pandas读取的series数据存在空数据时,需要使用try······except处理
da['时间2']=pd.to_datetime(da['时间1'],format='%Y-%m-%d')
da['时间3']=pd.to_datetime(da['时间1'])
da['时间4']=da['时间1'].apply(lambda x:datetime.datetime.strptime(x,'%Y-%m-%d'))
da['时间5']=datetime.datetime.strptime(da['时间1'],'%Y-%m-%d')
①尝试解决空数据问题
try:
da['确认']=pd.to_datetime(da['品牌确认时间'],format='%Y-%m-%d %Y-%M-%S')
except ValueError:
print('有空数据,无法转换')
2、时间格式转字符串
①x.strftime(‘格式’)
用于将时间格式转换为字符串形式(不能直接转换series格式,可与apply()函数结合)。
da['时间7']=da['时间2'].apply(lambda x:x.strftime('%Y-%m-%d'))
da['时间8']=
3、将datetime格式()时间转换为字符串形式
#思路:若为字符串转则首先利用to_datetime()将上传时间转换为datetime格式,最后使用dt.strftime()将转换后的datetime数据格式化为相应格式。
da['上传时间1']=pd.to_datetime(da['上传时间'].dt.strftime('%Y-%m-%d'))
da['上传时间2']=da['上传时间'].dt.strftime('%Y-%m-%d')
4、其它常见用法:
data=pd.DataFrame()
data["创建时间"]=pd.to_datetime(df) # 将数据转换为时间类型
data["创建日期"]=data["创建时间"].dt.date # 获取日期(Y%-M%-D%)
data["创建年份"]=data["创建时间"].dt.year # 获取年份
data["创建月份"]=data["创建时间"].dt.month # 获取月份
data["创建天数"]=data["创建时间"].dt.day # 获取多少号
data["创建时间段"]=data["创建时间"].dt.hour # 获取小时数
data["创建周"]=data["创建时间"].dt.isocalendar().week # 获取星期数
data["创建星期"]=data["创建时间"].dt.weekday.map({0:"星期一",1:"星期二",2:"星期三",\
3:"星期四",4:"星期五",5:"星期六",6:"星期日"}) # 获取星期几(0~6分别代表星期一~星期日)
# isocalendar()函数:
# 返回日期的year(年份),week(周数),day(星期几)三个指标
da=pd.DataFrame()
da["创建时间"]=pd.to_datetime(df)
da["创建时间"].dt.isocalendar()
da["年份"]=da["创建时间"].dt.isocalendar().year
da["周数"]=da["创建时间"].dt.isocalendar().week
da["星期"]=da["创建时间"].dt.isocalendar().day.map({1:"星期一",2:"星期二",3:"星期三",\
4:"星期四",5:"星期五",6:"星期六",7:"星期日"}) # (1~7分别代表星期一~星期日)