目录
datetime.datetime 和 pd.timestamp
(一)datetime.datetime( ) :将某一个str转化为时间类型datetime,用途广
(二)pd.to_datetime( ):将str转化为时间类型timestamp,用于时间切片
datetime.datetime 和 pd.timestamp
时间类型分为datetime和timestamp。对时间做处理一定要分清函数是属于哪个包里的,格式要变。
datetime:datetime-----------------------------------------
t_time = (datetime.datetime.strptime(item, '%Y-%m-%d %H:%M:%S') + datetime.timedelta(seconds=frequency))
strptime输出日期格式,strftime输出字符串格式
datetime.strptime(str, ‘%Y/%m/%d’)。item.strftime('%Y-%m-%d %H:%M:%S')。
datetime.timedelta:如果要用,需要先将日期通过strptime确定为非字符串形式,进行非字符串操作
datetime.now()
datetime.day,datetime.month,datetime.year 分别表示一个datetime对象的日,月,年
pd:timestamp-----------------------------------------
pd.to_datetime
pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, **kwargs) #也就是说至于用到date_range函数的时候才需要用pd.to_datetime,否则直接用datetime
datetime和timestamp比较
相同点:可自动更新和初始化,默认显示格式相同YYYY-MM-dd HH:mm:ss
不同点:
1. datetime的时间范围:不支持时区,8字节存储
2. timestamp的时间范围是:支持时区,存储毫秒数
time.strftime(time.localtime)
(一)datetime.datetime( ) :将某一个str转化为时间类型datetime,用途广
datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。如果仅导入import datetime,则必须引用全名datetime.datetime。
(1)datetime(%Y,%m,%d,%H,%M,%S):设定时间类型。datetime共有6个参数,分别代表的是年月日时分秒。其中年月日是必须要传入的参数,时分秒可以不传入,默认全为零。
eg:
(2)datetime.strptime(str, ‘%Y/%m/%d’):将Str和Unicode转化为datetime.datetime(),由字符串格式转化为日期格式的函数。日期格式也可以是 '%Y-%m-%d %H:%M:%S'
在很多情况下,我们的原始数据中的时间和日期并不是时间类型的,例如excel中可能是Unicode,csv中可能是Str。因此我们在进行时间切片之前首先要将非时间类型的时间数据转换为时间类型。
eg:
(3)
datetime.datetime.strftime('%Y-%m-%d %H:%M:%S'):由日期格式转化为字符串格式
item.strftime('%Y-%m-%d %H:%M:%S')
(4)datetime.now()
(5)
datetime.timedelta
frequency = frequency*60
datetime.timedelta(seconds=frequency)
t_time = (datetime.datetime.strptime(item, '%Y-%m-%d %H:%M:%S') + datetime.timedelta(seconds=frequency)) #datetime才能和timedelta相加
(二)pd.to_datetime( ):将str转化为时间类型timestamp,用于时间切片
pandas包的功能。和datetime.datetime( )功能类似。
(1)
eg 输入一串str: pd.to_datetime(str,format= ‘%Y/%m/%d’):设定时间类型
eg 输入一列str:
data['time_2']=data.appl_time.apply(lambda x: pd.to_datetime(x))
data['time_3'] = pd.to_datetime(data['appl_time'])
(2)pd.to_datetime(str,format= ‘%Y/%m/%d’):将Str和Unicode转化为时间格式
eg:
(3)pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, **kwargs)
(4)timestamp也可以和datetime.timedelta做运算
data_360 = data[(data['time_2']<= back_time)&\
(data['time_2']> (back_time + datetime.timedelta(-360)))]
占位符f'{}' 。正则'%.1f''%test;
python中 f'{}' 用法=format:
python中正则%用法:打印输出中,%为正则是与变量test结合使用的,'%.1f'
数据类型转换
object=str=dtype('O'),int64=int,float64=float,float和int都是数值型,只不过float是小数。规则:只有int或float之间才可以数值相加。如果要拼接而不运算,要转换为str。如果要进行日期类型的运算,如提取年份月份,要pd.to_datetime转换为datetime。
下表中展示的是Pandas、Python和Numpy中支持的数据类型,可以看到pandas中支持的类型是最丰富的的。
转化:
(1)将某列object转换为int
#对object进行必要的处理,分割之后取出第1个元素
df["2020年_新"] = df["2020年"].apply(lambda x:x.split("元")[0])
df["2019年_新"] = df["2019年"].apply(lambda x:x.split("元")[0])
#两种方法转换object为int格式
df["2020年_新"] = df["2020年_新"].astype("int")
df['2019年_新'] = pd.to_numeric(df['2019年_新'], errors='coerce')
#两列int才可以相加
df["前两年之和"] = df["2020年_新"] + df["2019年_新"]
df
(2)将某列float转换为object
df["增长率1"] = df["增长率"].apply(lambda x: str(round(100*x,2)) + "%") #或:
df["增长率2"] = df["增长率"].apply(lambda x: format(x,'.2%'))
df
(3)将某列int(年、月、日)转换为datatime
方法一:要先通过str拼接
df["月"] = df["月"].astype(str)
df["年"] = df["年"].astype(str)
df["生日"] = df["年"] + "-" + df["月"] + "-" + df["日"] #先转换成str才能拼接
df["生日"] = df["生日"].apply(lambda x: pd.to_datetime(x,format="%Y-%m-%d"))
#str转换成datatime日期格式
方法二:当属性名为英文时,pd.to_datetime可直接拼接int格式为日期格式
pd.to_datetime(df[['year', 'month', 'day']]) # 组合成日期
感言:本部分可以通过多做练习题来熟练。推荐实例: