pandas 按日期范围筛选数据的实现


Posted in Python onFebruary 20, 2021

pandas 是 python 中一个功能强大的库,这里就不再复述了,简单介绍下用日期范围筛选 pandas 数据。

日期转换

用来筛选的列是 date 类型,所以这里要把要筛选的日期范围从字符串转成 date 类型

比如我的数据包含列名为 trade_date,从 20050101 - 20190926 的数据,我要筛选出 20050606 - 20071016 的数据,那么,先如下转换数据类型:

s_date = datetime.datetime.strptime('20050606', '%Y%m%d').date()
e_date = datetime.datetime.strptime('20071016', '%Y%m%d').date()

数据筛选

非常简单,一行代码就搞定了:

df = df[(df['tra_date'] >= s_date) & (df['tra_date'] <= e_date)]

注意事项

  • 多个筛选条件并存时,不能用 and 连接,需要用单个 & 符号。
  • s_date <= df['trade_date'] <= e_date 等同于 and

pandas提取某段时间范围数据的五种方法

import pandas as pd
 
#读取文件
df = pd.read_csv('./TianQi.csv')
 
#获取九月份数据的几种方法
#方法一  使用行索引切片,['2019/9/1':'2019/9/30'],缺点是要求日期必须是连续的。为了方便查看取前5条,以下其他方法均取前5条,由于未进行排序,顺序会有差异
df.set_index('日期',inplace=True)
print(df['2019/9/1':'2019/9/30'].head())  #或者print(df.loc['2019/9/1':'2019/9/30',:]) 
'''
打印:
     最高温度 最低温度  天气  风向 风级 空气质量
日期                  
2019/9/1 33℃ 19℃ 多云~晴 西南风 2级  良
2019/9/2 34℃ 20℃   晴  南风 2级  良
2019/9/3 33℃ 20℃   晴 东南风 2级  良
2019/9/7 34℃ 21℃   晴 西南风 2级  良
2019/9/8 35℃ 22℃ 晴~多云 东北风 2级  良
'''
 
#方法二  利用列表生成式和startwith('2019/9')生成bool列表,缺点,比较麻烦。
print(df.loc[[True if i.startswith('2019/9') else False for i in df.index.tolist()],:].head())
'''
打印:
     最高温度 最低温度  天气  风向 风级 空气质量
日期                  
2019/9/4 32℃ 19℃   晴 东南风 2级  良
2019/9/5 33℃ 20℃   晴 东南风 2级  良
2019/9/6 33℃ 20℃   晴 东南风 1级  良
2019/9/1 33℃ 19℃ 多云~晴 西南风 2级  良
2019/9/2 34℃ 20℃   晴  南风 2级  良
'''
 
#方法三  利用pandas的str和startswith('2019/9')|contains('2019/9')。
df1 = pd.read_csv('./TianQi.csv')
print(df1[df1['日期'].str.startswith('2019/9')].head())
'''
打印:
     日期 最高温度 最低温度  天气  风向 风级 空气质量
243 2019/9/4 32℃ 19℃   晴 东南风 2级  良
244 2019/9/5 33℃ 20℃   晴 东南风 2级  良
245 2019/9/6 33℃ 20℃   晴 东南风 1级  良
246 2019/9/1 33℃ 19℃ 多云~晴 西南风 2级  良
247 2019/9/2 34℃ 20℃   晴  南风 2级  良
'''
 
#方法四  讲日期转换成datetime类型
df1['日期'] = pd.to_datetime(df1['日期'])
df1.set_index('日期',inplace=True,drop=True)
#print(df1['2019'])  #取2019年数据,或者df.loc['2019']
print(df1['2019/09'].head())  
'''
 取201909月数据,其他变形写法df['2019-9'] df['2019-09'] df['2019/9'] df.loc['2019-9',:] df.loc['2019-09',:] df.loc['2019/09',:] df.loc['2019/9',:]
打印:
      最高温度 最低温度  天气  风向 风级 空气质量
日期                   
2019-09-04 32℃ 19℃   晴 东南风 2级  良
2019-09-05 33℃ 20℃   晴 东南风 2级  良
2019-09-06 33℃ 20℃   晴 东南风 1级  良
2019-09-01 33℃ 19℃ 多云~晴 西南风 2级  良
2019-09-02 34℃ 20℃   晴  南风 2级  良
'''
#注意如果要获取某一天的数据,则必须使用切片,比如df['2019/9/1':'2019/9/1'] 
'''
获取一段时间
df1.truncate(after = '2019-9-01') # 返回 after 以前的数据
df1.truncate(before = '2019-9-01') # 返回 before 以后的数据
df1['20190901':'2019/9/10']
'''
 
#方法五  #读取文件时,通过parse_dates=['日期'],将日期转化为datetime类型,相当于 pd.to_datetime。同时可以使用index_col将那一列作为的行索引,相当有set_index。
df2 = pd.read_csv('./TianQi.csv',parse_dates=['日期'])
df2['年'] = df2['日期'].dt.year
df2['月'] = df2['日期'].dt.month
qstr = "年=='2019' and 月=='9'"
print(df2.query(qstr).head())
'''
打印:
      日期 最高温度 最低温度  天气  风向 风级 空气质量   年 月
243 2019-09-04 32℃ 19℃   晴 东南风 2级  良 2019 9
244 2019-09-05 33℃ 20℃   晴 东南风 2级  良 2019 9
245 2019-09-06 33℃ 20℃   晴 东南风 1级  良 2019 9
246 2019-09-01 33℃ 19℃ 多云~晴 西南风 2级  良 2019 9
247 2019-09-02 34℃ 20℃   晴  南风 2级  良 2019 9
'''
 
'''
dt的其他常用属性和方法如下:
df['日期'].dt.day  # 提取日期
df['日期'].dt.year # 提取年份
df['日期'].dt.hour # 提取小时
df['日期'].dt.minute # 提取分钟
df['日期'].dt.second # 提取秒
df['日期'].dt.week # 一年中的第几周
df['日期'].dt.weekday # 返回一周中的星期几,0代表星期一,6代表星期天
df['日期'].dt.dayofyear # 返回一年的第几天
df['日期'].dt.quarter # 得到每个日期分别是第几个季度。
df['日期'].dt.is_month_start # 判断日期是否是每月的第一天
df['日期'].dt.is_month_end # 判断日期是否是每月的最后一天
df['日期'].dt.is_leap_year # 判断是否是闰年
df['日期'].dt.month_name() # 返回月份的英文名称
df['日期'].dt.to_period('Q') # M 表示月份,Q 表示季度,A 表示年度,D 表示按天
df['日期'].dt.weekday_name # 返回星期几的英文 由于pandas版本问题,改变pandas版本在cmd中输入:pip install --upgrade pandas==0.25.3
Series.dt.normalize() # 函数将给定系列对象中的时间转换为午夜。
'''

到此这篇关于pandas 按日期范围筛选数据的实现的文章就介绍到这了,更多相关pandas 日期范围筛选内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python写的Socks5协议代理服务器
Aug 06 Python
常见的在Python中实现单例模式的三种方法
Apr 08 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
Django的session中对于用户验证的支持
Jul 23 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
flask框架路由常用定义方式总结
Jul 23 Python
python区分不同数据类型的方法
Oct 14 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
opencv-python的RGB与BGR互转方式
Jun 02 Python
Python 如何调试程序崩溃错误
Aug 03 Python
Pytest单元测试框架如何实现参数化
Sep 05 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
Feb 20 #Python
pandas按条件筛选数据的实现
Feb 20 #Python
python实现b站直播自动发送弹幕功能
Feb 20 #Python
如何用 Python 制作 GitHub 消息助手
Feb 20 #Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 #Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 #Python
安装不同版本的tensorflow与models方法实现
Feb 20 #Python
You might like
基于PHP与XML的PDF文档生成技术
2006/10/09 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
php制作动态随机验证码
2015/02/12 PHP
php动态函数调用方法
2015/05/21 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
python里对list中的整数求平均并排序
2014/09/12 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
python合并同类型excel表格的方法
2018/04/01 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
PHP面试题及答案一
2012/06/18 面试题
教你怎样写好自我评价
2013/10/05 职场文书
服装发布会策划方案
2014/05/22 职场文书
社区志愿者活动方案
2014/08/18 职场文书
班主任培训研修日志
2015/11/13 职场文书
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang