文章目录

  • 一、pd.to_datetime实现日期字符串转日期
  • 二、pd.date_range生成日期序列
  • 三、Series.dt对象
  • 四、strftime函数格式化日期
  • 五、 时间差(dt.timedelta)
  • 六、总结

本节我们介绍在处理日期时间时的一些常用的处理方法,以一份酒店入住数据为例进行讲解。pandas 用 Timestamp 表示时点数,在大多数情况下和 python 的 datetime 类型的使用方法是通用的。

首先读入数据:

data=pd.read_csv('data/hotel.csv')
data.head()

一、pd.to_datetime实现日期字符串转日期

  • api:pd.to_datetime(str) 字符串类型对象转换成日期类型对象
 In[]:data['入住日期'].dtype #查看'入住日期'列的类型  为object类型,即字符串对象
Out[]:dtype('O')
 In[]:data.loc[:,'入住日期']=pd.to_datetime(data['入住日期'])#将'入住日期'列抓换成日期型后赋给'入住日期'列data['入住日期'].dtype#再次输出'入住日期'列的类型  为日期型
Out[]:dtype('<M8[ns]')#日期类型

二、pd.date_range生成日期序列

  • api:pd.date_range(start=None, end=None, periods=None, freq=‘D’)

    • start:起始日期,字符串
    • end:终止日期,字符串
    • periods:期数,取值为整数或None
    • freq:频率或日期偏移量,取值为string或DateOffset,默认为’D’

该函数主要用于生成一个固定频率的时间索引,在调用构造方法时,必须指定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')

常用频率和日期偏移量:

三、Series.dt对象

  • pandas 的 pandas.Series.dt 可以获得日期/时间类型的相关信息,返回值均为int型。比如:
data['入住日期'].dt.year  #获取年份
data['入住日期'].dt.month  #获取月份
data['入住日期'].dt.quarter  #获取季度
  • 为数据表添加新列’入住月份’:
#提取data['入住日期']的月份信息并存到新的一列中
data.loc[:,'入住月份']=data['入住日期'].dt.month
data.head()

  • 为数据表添加新列’in_weekday’:
#提取data['入住日期']的weekday信息并存到新的一列中
data.loc[:,'in_weekday']=data['入住日期'].dt.weekday
data.head()

  • pandas.Series.dt对象能够返回的信息有:
类别 解释
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 是否年末第一天

四、strftime函数格式化日期

  • strftime函数实际上是datetime模块中的函数,并不是pandas中的成员,在实际工作中我们常用这种方式对日期进行格式化

    • api:datetime.strftime(date,format_str)

      • date:需要格式化的日期
      • format_str:格式化字符串
    • 例如:我们需要提取’入住日期’的年份和月份组成一个新的列:
#首先需要引入datetime模块
from datetime import datetime
#配合apply函数
data.loc[:,'入住年月']=data['入住日期'].apply(lambda x:datetime.strftime(x,"%Y-%m"))
data.head()


常用格式字符串介绍:

  • Series.dt.to_period 另一种方法
data.loc[:,'入住年月2']= data['入住日期'].dt.to_period('M')
data.head()


第二种方法使用起来更加简单,参数 M 表示月份,Q 表示季度,A 表示年度,D 表示按天,这几个参数比较常用。

五、 时间差(dt.timedelta)

时间差(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

六、总结

  • pd.to_datetime(str) 【掌握】
  • pd.date_range(start=None, end=None, periods=None, freq=‘D’)【知道】
    • start:起始日期 字符串
    • end:终止日期,字符串
    • periods:期数,取值为整数或None
    • freq:频率或日期偏移量,取值为string或DateOffset,默认为’D’
    • 必须指定start、end、periods中的两个参数值,否则报错
  • Series.dt对象【掌握】
    • data[‘入住日期’].dt.year #获取年份
    • data[‘入住日期’].dt.month #获取月份
    • data[‘入住日期’].dt.quarter #获取季度
  • datetime.strftime(date,format_str)【掌握】
    • date:需要格式化的日期
    • format_str:格式化字符串
  • (data[‘离店日期’]-data[‘入住日期’]).dt.days【知道】

Pandas时间序列处理相关推荐

  1. EduCoder Pandas高效化运算与时间序列处理 第3关:Pandas时间序列的高级应用

    文章目录 任务描述 相关知识 时间频率与偏移量 重新取样.迁移和窗口 重新取样 时间迁移 移动时间窗口 编程要求 测试说明 任务描述 根据相关知识完成下列任务: 求上个季度(仅含工作日)的平均值: 求 ...

  2. Pandas 时间序列 - DateOffset 对象

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 国亡身殒今何有,只留离骚在世间. ...

  3. Pandas 时间序列 - 实例方法与重采样

    呆鸟云:"数据分析就像是夜里行军,业务是灯塔,是地图,没灯塔你不知道方向,没地图你不知道该怎么走.技术是你的交通工具,你用11路,还是骑自行车,还是开跑车,交通工具越好,你实现目标的速度越快 ...

  4. Pandas时间序列 :rolling 用法快速理解

    相信初学Pandas时间序列时,会遇到rolling函数,不知道该怎么理解,对吧? 让我们用最简单的例子来说明吧. 代码如下: import pandas as pd # 导入 pandas inde ...

  5. pandas 时间序列的优化转化

    pandas 时间序列的优化转化 #!/usr/bin/env Python3 __author__ = '未昔/angelfate' __date__ = '2019/7/26 9:58' # -* ...

  6. Pandas 时间序列 - 纵览与时间戳

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 一身报国有万死,双鬓向人无再青. ...

  7. python画双折线图-Python Pandas 时间序列双轴折线图

    时间序列pv-gmv双轴折线图 import numpy as np import pandas as pd import matplotlib.pyplot as plt n = 12 date_s ...

  8. python处理时间序列_Python——Pandas 时间序列数据处理

    介绍 Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取.转换.过滤.分析等一系列操作.同样,Pandas 已经被证明为是非常强大的用于处理时间序列数据的工具.本节将介绍 ...

  9. Pandas时间序列进阶(日期范围,频率,移位,时区处理)

    日期范围 生成日期范围:pd.date_range()方法用于根据特定频率生成指定长度的DatetimeIndex pd.date_range(start=None,end=None,periods= ...

  10. Pandas时间序列数据处理和datetime模块详细教程

    时间序列分析中,常常需要处理时间相关数据,故参考<Python for Data Analysis>总结了Python和Pandas常用的时间序列数据处理的相关操作,并在 Python3. ...

最新文章

  1. maven指定构建的编码格式
  2. Linux -- gpasswd
  3. vue 导入element-ui css报错解决方法
  4. 华为手机销量超过苹果,华为能算是全球第二大手机厂家吗?
  5. 如何一行代码搞定SSD模型推理与结果解析
  6. WinForm中日期控件开窗
  7. xlsxwriter php,Xlsxwriter
  8. 泰森怎么会输给道格拉斯_巅峰泰森为何遭遇六连败?日本女孩不是主因,而是这位黑人超模...
  9. python paramiko_Python3之paramiko模块
  10. 前端的UI设计与交互之反馈示篇
  11. thinkphp 字段静态验证$_validate中错误提醒多语言化写成{%LANGUATE}的原因
  12. html和css实现时间表,前端 CSS : 6# 纯 CSS 实现时间线
  13. access链接 mysql数据库教程_JDBC连接ACCESS数据库的三种方法
  14. 【OSPF基础(链路状态路由协议、ospf基础术语、ospf协议报文类型、ospf三大表项、邻居和邻接关系、ospf网络类型、DR与BDR、ospf基本配置)】-20211210、13、14
  15. python 比对匹配_用Python从头实现Needleman-Wunsch序列比对算法
  16. opboot怎么刷入固件_竞斗云系列四:Opboot1.09+128M固件刷机
  17. react基础之--样式设置
  18. 钻石小鸟:年轻兄妹的百年品牌梦
  19. 证件照制作:使用PS打印一寸照片
  20. mysql用户replace权限_mysql查看用户的权限脚本

热门文章

  1. hmm 求隐藏序列_隐马尔可夫模型HMM
  2. ubuntu找不到chkconfig命令
  3. utf-8的中文是一个字符占几个字节
  4. TortoiseGit第一次使用
  5. BLDC双闭环(速度PI+电流PI)simulink仿真模型
  6. Docker教程-8-DockerHub仓库及私有仓库的使用
  7. SRS流媒体服务器SDP解析流程
  8. RFID——充值消费系统
  9. 华为交换机配置命令总结
  10. 0x0000000A 蓝屏问题