需求:将’Sep-2006’ 这种字符串日期格式转化为2006-09-01,且为datetime格式
import pandas as pd
import numpy as np
import time,datetime
# 时间日期转换
def trans_format(time_string, from_format, to_format='%Y.%m.%d'):
# time_string 第一个参数默认为每个要处理的值,不用传参
# from_format:原字符串的时间格式
# to_format:转化后的时间格式 默认'%Y.%m.%d'
if pd.isnull(time_string):
return np.nan
else:
# 提取要处理的数据 转化为struct_time类型
time_struct = time.strptime(time_string,from_format)
# 将上面的struct_time类型的数据转化为目标日期格式的字符串
times = time.strftime(to_format, time_struct)
# 将目标日期的字符串转化为日期格式
times = datetime.datetime.strptime(times,to_format)
# 以下是将日期格式转化为字符串,times为datetime类型
# times = times.strftime(to_format)
return times
##时间格式转化
df = pd.DataFrame([['张三',23,'男','Sep-2006'],['李四1',27,'女', 'Sep-2009']],columns=['姓名','年龄','性别','日期'])
# args中传递的是除开函数的第一个参数外的其他参数,也就是'%b-%Y'对应from_format,'%Y-%m'对应to_format
# 而trans_format函数的第一个参数是默认的,就是每个要处理的值
df['日期1'] = df['日期'].apply(trans_format,args=('%b-%Y','%Y-%m'))
print(df)
# 字符串格式化参数列表:
'''
字符串格式化参数列表:
datetime. strftime (format)
%a: 星期的简写。如 星期三为Web
%A: 星期的全写。如 星期三为Wednesday
%b: 月份的简写。如4月份为Apr
%B: 月份的全写。如4月份为April
%c: 日期时间的字符串表示。(如: 04/07/10 10:43:39)
%d: 日在这个月中的天数(是这个月的第几天)
%f: 微秒(范围[0,999999])
%H: 小时(24小时制,[0, 23])
%I: 小时(12小时制,[0, 11])
%j: 日在年中的天数 [001,366](是当年的第几天)
%m: 月份([01,12])
%M: 分钟([00,59])
%p: AM或者PM
%S: 秒(范围为[00,61],为什么不是[00, 59],参考python手册~_~)
%U: 周在当年的周数当年的第几周),星期天作为周的第一天
%w: 今天在这周的天数,范围为[0, 6],6表示星期天
%W: 周在当年的周数(是当年的第几周),星期一作为周的第一天
%x: 日期字符串(如:04/07/10)
%X: 时间字符串(如:10:43:39)
%y: 2个数字表示的年份
%Y: 4个数字表示的年份
%z: 与utc时间的间隔 (如果是本地时间,返回空字符串)
%Z: 时区名称(如果是本地时间,返回空字符串)
%%: %% => %
'''