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切换pip安装源的方法详解
Nov 18 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
python中的计时器timeit的使用方法
Oct 20 Python
实例讲解Python爬取网页数据
Jul 08 Python
python try except 捕获所有异常的实例
Oct 18 Python
想学python 这5本书籍你必看!
Dec 11 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
python tkinter组件摆放方式详解
Sep 16 Python
Django视图扩展类知识点详解
Oct 25 Python
Python如何安装第三方模块
May 28 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 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 获取可变函数参数的函数
2009/08/26 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
php探针不显示内存解决方法
2019/09/17 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
python实现将元祖转换成数组的方法
2015/05/04 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
用python写测试数据文件过程解析
2019/09/25 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
幼儿园园长自我鉴定
2013/10/22 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
餐厅感恩节活动策划方案
2014/10/11 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
Mysql - 常用函数 每天积极向上
2021/04/05 MySQL
python元组打包和解包过程详解
2021/08/02 Python
flex弹性布局详解
2022/03/20 HTML / CSS
MySQL 字符集 character
2022/05/04 MySQL