首先读入数据:
data=pd.read_csv('data/hotel.csv')
data.head()
In[]:data['入住日期'].dtype #查看'入住日期'列的类型 为object类型,即字符串对象
Out[]:dtype('O')
In[]:data.loc[:,'入住日期']=pd.to_datetime(data['入住日期'])#将'入住日期'列抓换成日期型后赋给'入住日期'列
data['入住日期'].dtype#再次输出'入住日期'列的类型 为日期型
Out[]:dtype(')#日期类型
该函数主要用于生成一个固定频率的时间索引,在调用构造方法时,必须指定start、end、periods中的两个参数值,否则报错。
In [12]: pd.date_range(start='20170101',end='20170110')
Out[12]:
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
'2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
'2017-01-09', '2017-01-10'],
dtype='datetime64[ns]', freq='D')
In [13]: pd.date_range(start='20170101',periods=10)
Out[13]:
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
'2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
'2017-01-09', '2017-01-10'],
dtype='datetime64[ns]', freq='D')
data['入住日期'].dt.year #获取年份
data['入住日期'].dt.month #获取月份
data['入住日期'].dt.quarter #获取季度
#提取data['入住日期']的月份信息并存到新的一列中
data.loc[:,'入住月份']=data['入住日期'].dt.month
data.head()
#提取data['入住日期']的weekday信息并存到新的一列中
data.loc[:,'in_weekday']=data['入住日期'].dt.weekday
data.head()
类别 | 解释 |
---|---|
year | 年 |
month | 月 |
day | 日 |
hour | 时 |
minute | 分钟 |
second | 秒 |
date | 返回日期 |
time | 返回时间 |
dayofyear | 年序日 |
weekofyear | 年序周 |
week | 周 |
dayofweek | 周中的星期几,ex: Friday |
quarter | 季度 |
days_in_month | 一个月中有多少天 |
is_month_start | 是否月初第一天 |
is_month_end | 是否月末最后一天 |
is_quarter_start | 是否季度的最开始 |
is_quarter_end | 是否季度的最后一个 |
is_year_start | 是否年初第一天 |
is_year_end | 是否年末第一天 |
#首先需要引入datetime模块
from datetime import datetime
#配合apply函数
data.loc[:,'入住年月']=data['入住日期'].apply(lambda x:datetime.strftime(x,"%Y-%m"))
data.head()
data.loc[:,'入住年月2']= data['入住日期'].dt.to_period('M')
data.head()
第二种方法使用起来更加简单,参数 M 表示月份,Q 表示季度,A 表示年度,D 表示按天,这几个参数比较常用。
时间差(dt.timedelta)是时间上的差异,以不同的单位来表示。例如:日,小时,分钟,秒。它们可以是正值,可正可负;大多数情况下可与datetime.timedelta互换,一般用来表示两个日期之间的差距。
例如:我们想获取客人的入住天数:
data.loc[:,'离店日期']=pd.to_datetime(data['离店日期']) #将'离店日期'列转换成日期格式
data['离店日期']-data['入住日期']#离店日期-入住日期
结果是一个timedelta类型的Series,并不是我们希望得到的天数,我们还需要访问timedelta对象的属性来提取天数
time=data['离店日期']-data['入住日期']
data.loc[:,'入住天数']=time.dt.days#通过访问timedelta.dt对象的days属性拿到天数
data.head()
timedelta对象有属性:days、seconds、microseconds