Pandas处理日期数据的常见操作集锦

  • 数据读取及整理
  • 获取某个日期之前/后或时间区间的数据
  • python 获取当前时间及前一天时间
  • pandas的日期时间间隔运算选取指定时间范围内/外的数据
  • 利用pandas计算DataFrame两列日期的间隔小时数
  • numpy中-Datetimes and Timedeltas的使用
  • 日期格式转换
  • 日期的计算

数据读取及整理

将数据类型转换为日期类型

 df['date'] = pd.to_datetime(df['date'])

将date设置为index

 df = df.set_index('date')

获取某年的数据

print(df['2010'].head())

获取某月的数据

print(df['2013-11'].head())

提取全日期字段中的日期和时间项

data4["订单生成时间"] = pd.to_datetime(data4["订单生成时间"])
data4["时间"] = data4["订单生成时间"].dt.hour   #提取时间
data4["日期"] = data4["订单生成时间"].dt.date   #提取日期

获取某个日期之前/后或时间区间的数据
dataframe的.truncate()函数可以截取某个时期之前或之后的数据,或者某个时间区间的数据,进行统计分析。
注意事项:
使用.truncate()函数对df进行数据集截取,遇到截取数据不符合预期,且若时间序列无序会抛出异常
解决措施:
在使用.truncate()函数对df进行数据集截取之前,需要先使用df=df.sort_values(‘date’)‘date’列按时间先后进行排序,然后使用df = df.set_index('date'),将“date”设置为index,最后再使用df_last=df.truncate(after=‘2019-05-22 16:00:00’)提取指定时间节点之前的数据。
函数语法:

DataFrame.truncate(before=None, after=None, axis=None, copy=True)

参数说明:
before:取值范围:date,string,int,是指截断此索引值之前的所有行
after:取值范围:date,string,int,是指截断此索引值后的所有行
axis:取值范围:{0或’index’,1或’columns’}(可选),是指轴截断。 默认情况截断索引(行)。
copy:取值范围:boolean,默认为True,返回截断部分的副本
常见用法:

  1. 获取2014年以后的数据
print(df.truncate(before='2014').head())

获取2013-11月之前的数据,用after

print(df.truncate(after='2013-11').head())

获取2016-02月以后的数据,用before

print(df.truncate(before='2016-02').head())

获取2019-05-22日16:00:00时之前的数据

 df=data.truncate(after='2019-05-22 16:00:00')

获取指定时间区间的数据

 df=df['2016-02-2':'2016-02-10']

获取指定时间区间的数据

 df=df['2016-02-2':'2016-02-10']

python 获取当前时间及前一天时间

import datetime
from pandas.tseries.offsets import Day
now_time =datetime.datetime.now()#获取当前时间
yes_time = (now_time -1*Day()).strftime('%Y-%m-%d')#格式化
print(yes_time)

pandas的日期时间间隔运算

import datetime
from datetime import timedelta
df_189[‘订单生成日期’]=pd.to_datetime(df_189[‘订单生成日期’])  #修改“订单生成时间”的数据类型
df_189[‘订单生成日期’]+timedelta(days=1)  #后一天的日期
df_189[‘订单生成日期’]-timedelta(days=3)  #前3天的日期

选取指定时间范围内/外的数据

   ##提取3日前日期和7日前日期
now_time =datetime.datetime.now()#获取当前时间
yes_time_7 = (now_time -7*Day()).strftime('%Y-%m-%d')#格式化
yes_time_3= (now_time-3*Day()).strftime("%Y-%m-%d")
print(yes_time_7)
print('='*50)
print(yes_time_3)df_189['订单生成日期']=pd.to_datetime(df_189['订单生成日期'])  #修改“订单生成时间”的数据类型
df_189_7= df_189[df_189['订单生成日期']==yes_time_7]
df_189_3= df_189[df_189['订单生成日期']==yes_time_3]
print(df_189_7.info()) #选取该错误数据对应的时间范围外的数据,多个条件时 '|'代表'或','&'代表'且'  或者
a= df_189[df_189['订单生成日期']=='2019-06-23']   #筛选2019-06-23的数据

利用pandas计算DataFrame两列日期的间隔小时数

import pandas as pd
#方法一:
#先利用to_datetime转换为时间格式,tm列的数据形式为'yyyy-MM-dd HH:mm:ss'
df['tm_1'] = pd.to_datetime(df['tm_1'])
df['tm_2'] = pd.to_datetime(df['tm_2'])
#利用".dt.seconds"转换为秒,除以相对于的间隔数得到分钟、小时等
df['diff_time'] = (df['tm_1'] - df['tm_2']).dt.seconds/60
#利用round函数可进行四舍五入
df['diff_time'] = round(df['diff_time'])#方法二,日期相减变为小时;变为天的话将h替换为D即可:
df['diff_time'] = (df['tm_1'] - df['tm_2']).values/np.timedelta64(1, 'h')
#Dataframe中的时间是不能直接进行相加减的,所以需要先用pandas的to_datetime()方法,转化成时间格式进行加减,然后再转换成df格式
#delta=df1['Time_end']-df1['Time_start'] #直接报错TypeError: unsupported operand type(s) for -: 'str' and 'str'
#日期相减变为小时;变为天的话将h替换为D即可:
sf_df['交易周期']=pd.DataFrame((pd.to_datetime(sf_df['交易完成时间'])-pd.to_datetime(sf_df['订单生成时间'])).values/np.timedelta64(1,'h'))

numpy中-Datetimes and Timedeltas的使用日期格式转换
在numpy中,使用np.datetime64('2017-08' , 'D')可以很方便的将字符串转换成日期类型。

import numpy as np
np.datetime64('2017-08-06')  #精确到日
>>>
numpy.datetime64('2017-08-06')
np.datetime64('2018-08')   #精确到月
>>>
numpy.datetime64('2018-08')
# 通过参数,强制将数据格式转为我们想要的粒度
np.datetime64('2017-08','D')  #转化到日
>>>
numpy.datetime64('2017-08-01')
np.datetime64('2017-08','Y')  #转化到年
>>>
numpy.datetime64('2017')
a = np.array(['2017-07-01','2017-07-15','2017-08-01'],dtype = np.datetime64)  #列表日期
a
>>>
array(['2017-07-01', '2017-07-15', '2017-08-01'], dtype='datetime64[D]')
# 我们也可以使用arange函数初始化数组
b = np.arange('2017-08-01','2017-09-01',dtype = np.datetime64)
b
>>>
array(['2017-08-01', '2017-08-02', '2017-08-03', '2017-08-04','2017-08-05', '2017-08-06', '2017-08-07', '2017-08-08','2017-08-09', '2017-08-10', '2017-08-11', '2017-08-12','2017-08-13', '2017-08-14', '2017-08-15', '2017-08-16','2017-08-17', '2017-08-18', '2017-08-19', '2017-08-20','2017-08-21', '2017-08-22', '2017-08-23', '2017-08-24','2017-08-25', '2017-08-26', '2017-08-27', '2017-08-28','2017-08-29', '2017-08-30', '2017-08-31'], dtype='datetime64[D]')

日期的计算
在numpy中,我们可以进行简单的日期计算

# 两个日期相减,会得到相差的天数
np.datetime64('2017-08-03') - np.datetime64('2017-07-15')
>>>
numpy.timedelta64(19,'D')
# 这里日期可以直接减去对应的天数
np.datetime64('2017-08-03') - np.timedelta64(20,'D')
>>>
#这里日期的粒度必须保证一样,一个是D,一个是M,是不可以相减的
np.datetime64('2017-08-03') - np.timedelta64(1,'M')
>>>
TypeError: Cannot get a common metadata divisor for NumPy datetime metadata [D] and [M] because they have incompatible nonlinear base time units
np.datetime64('2017-08') - np.timedelta64(1,'M')
>>>
numpy.datetime64('2017-07')(np.datetime64('2014-10-30 23:00:00') - np.datetime64('2014-10-21 00:00:00'))  #按秒计时(np.datetime64('2014-10-30 23:00:00') - np.datetime64('2014-10-21 00:00:00'))/np.timedelta64(1, 'h')   #计算时间差,并转为小时
>>>
239.0
#计算终止时间-初试时间,转为小时格式,最后格式设置为整型。np.floor((x - start_hour) / np.timedelta64(1, 'h')).astype(np.uint16)
np.floor((np.datetime64('2014-10-30 23:00:00') - np.datetime64('2014-10-21 00:00:00'))/np.timedelta64(1, 'h')).astype(np.uint16)>>>239

Pandas处理日期数据的常见操作集锦相关推荐

  1. pandas判断日期是否是闰年(is_leap_year)实战: 数据列转化为日期(时间)格式、判断pandas的日期数据列是否是闰年

    pandas判断日期是否是闰年(is_leap_year)实战: 数据列转化为日期(时间)格式.判断pandas的日期数据列是否是闰年 目录

  2. excel pandas 空格_pandas 实现 Excel 常见操作 (1)

    Excel 是数据处理最常用的工具,pandas 是数据分析的利器.那么,Excel 一些常见的操作, pandas 如何实现呢?网上有两篇挺有意思的文章,对此做了详细介绍.我结合自己在学习博文过程中 ...

  3. C标准函数库中获取时间与日期、对时间与日期数据操作及格式化

    表示时间的三种数据类型[编辑] 日历时间(calendar time),是从一个标准时间点(epoch)到现在的时间经过的秒数,不包括插入闰秒对时间的调整.开始计时的标准时间点,各种编译器一般使用19 ...

  4. 数据科学 IPython 笔记本 7.6 Pandas 中的数据操作

    7.6 Pandas 中的数据操作 原文:Operating on Data in Pandas 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(P ...

  5. python之日期与时间处理模块及利用pandas处理时间序列数据

    文章目录 时间序列 一.日期和时间数据类型及工具 1.1字符串与datetime互相转换 二.时间序列基础 时间序列 时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域, ...

  6. 一文速学-Pandas处理时间序列数据操作详解

    目录 前言 一.获取时间 二.时间索引 三.时间推移 参阅 前言 一般从数据库或者是从日志文件读出的数据均带有时间序列,做时序数据处理或者实时分析都需要对其时间序列进行归类归档.而Pandas是处理这 ...

  7. pandas——数据移位、数据转换、数据合并、数据导出和日期数据的处理,时间序列等

    pandas统计分析(下) 本文主要介绍使用pandas进行数据移位.数据转换.数据合并.数据导出和日期数据的处理,时间序列等. 数据移位 数据移位就是在分析数据时,需要移动到上一条,在pandas中 ...

  8. Pandas数据表关联操作

    pandas数据表关联操作 Pandas具有功能全面的高性能内存中连接操作,与SQL等关系数据库非常相似. Pandas提供了一个单独的merge()函数,作为DataFrame对象之间所有标准数据库 ...

  9. pandas使用dt.year(month/day/hour/minute/second)函数抽取dataframe日期数据列对应的年月日时分秒信息

    pandas使用dt.year(month/day/hour/minute/second)函数抽取dataframe日期数据列对应的年月日时分秒信息 目录 pandas使用dt.year(month/ ...

最新文章

  1. 【Android工具】更新WPS全功能正版授权无广告版
  2. 美妆AI要抢李佳琦的饭碗?
  3. java与c 通信_Java与C之间的socket通信
  4. uva 1433——Garlands
  5. Ubuntu安装桌面环境
  6. Fedora 18在ASUS N6系列电脑上以太网卡驱动的安装
  7. bundle + forever部署Meteor App
  8. Python包和__init__.py文件
  9. Python3入门机器学习经典算法与应用 第3章 更多相关操作
  10. 【处理手记】VS2010SP1安装不上Visual Studio 2010 SP1 SDK的解决办法
  11. App消息推送 实现原理
  12. vue2支付宝网页授权登录
  13. 【热血传奇】 添加新地图
  14. 基于android的个人理财软件 android stu_Android聊天软件开发(基于网易云IM即时通讯)——注册账号(二)...
  15. RequestMapping的映射URL模板
  16. Redis过期策略---实现原理
  17. 《爱してる 》歌词与音译(大爱哇)
  18. mybatis中的动态sql
  19. 为什么好好的就不快乐了?
  20. 经典悖论漫游(续)[转]

热门文章

  1. x2000 ffmpeg avcodec_send_packet
  2. matlab 生成 word 表格,Matlab生成Word表格范例代码
  3. vue之vue的生命周期、swiper、自定义组件的封装、自定义指令、过滤器、单文件组件及vue-cli
  4. PHP:【商城后台管理系统】admin超级管理员后台操作界面部署{无限级菜单}
  5. 商城后台管理系统学习日志-01
  6. [基于harbor部署私有仓库] 4 推送镜像到harbor
  7. More Effective C++ 阅读笔记 解释清晰
  8. jsbox 导入_JSBox脚本分享
  9. 国内云存储厂商酷盘宣布获2000万美元B轮投资
  10. 使用spool导出数据