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中数据解析
May 05 Python
python实现井字棋游戏
Mar 30 Python
python 专题九 Mysql数据库编程基础知识
Mar 16 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
python正则中最短匹配实现代码
Jan 16 Python
python版opencv摄像头人脸实时检测方法
Aug 03 Python
python实现月食效果实例代码
Jun 18 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
python修改字典键(key)的方法
Aug 05 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
利用python Pandas实现批量拆分Excel与合并Excel
May 23 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 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代码
2010/02/16 PHP
验证用户是否修改过页面的数据的实现方法
2008/09/26 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
js文字横向滚动特效
2015/11/11 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
python实现udp传输图片功能
2020/03/20 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
连锁经营管理专业大学生求职信
2013/10/30 职场文书
艾滋病宣传标语
2014/06/25 职场文书
团日活动总结怎么写
2014/06/25 职场文书
个人买房协议书范本
2014/10/06 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
经营场所使用证明
2015/06/19 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书
MySQL慢查询的坑
2021/04/28 MySQL
浅谈JS的二进制家族
2021/05/09 Javascript