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基础教程之实现石头剪刀布游戏示例
Feb 11 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
解决phantomjs截图失败,phantom.exit位置的问题
May 17 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
Python求离散序列导数的示例
Jul 10 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
python conda操作方法
Sep 11 Python
Python面向对象原理与基础语法详解
Jan 02 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
Python实现手势识别
Oct 21 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
phpinfo 系统查看参数函数代码
2009/06/05 PHP
彻底杜绝PHP的session cookie错误
2009/08/09 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
使用PHP开发留言板功能
2019/11/19 PHP
jQuery 表单验证扩展(四)
2010/10/20 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
python写的一个squid访问日志分析的小程序
2014/09/17 Python
python实现电子书翻页小程序
2019/07/23 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
如何在django中添加日志功能
2020/02/06 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
爱普生美国官网:Epson美国
2018/11/05 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
大四毕业生自荐书
2014/07/05 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
大学运动会加油稿
2015/07/22 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
Python基础知识学习之类的继承
2021/05/31 Python