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

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 日期范围筛选内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pandas条件组合筛选和按范围筛选的示例代码

    1.从记录中选出所有fault_code列的值在fault_list= [487, 479, 500, 505]这个范围内的记录 record2=record[record['FAULT_CODE'].isin(fault_list)] 要用.isin 而不能用in,用 in以后选出来的值都是True 和False,然后报错: ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item()

  • pandas筛选某列出现编码错误的解决方法

    如下所示: df = df[df['cityname']==u'北京市'] 记得,如果用的python2,一定要导入 import sys reload(sys) sys.setdefaultencoding('utf-8') 或者在中文前面加入u'表示unicode编码的,因为pandas对象中中文字符为unicode类型的. 以上这篇pandas筛选某列出现编码错误的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 使用pandas库对csv文件进行筛选保存

    这个操作现在看来真没啥难的,但是我找相关的资料真的找了好久. 多数大佬都是直接pandas官网甩我脸上,然后举一个入门级的例子. https://pandas.pydata.org/docs/reference/index.html 首先导入pandas库 import pandas as pd 然后使用read_csv来打开指定的csv文件 df = pd.read_csv('./IP2LOCATION.csv',encoding= 'utf-8') 这个函数里面需要写入csv文件的路径,如果

  • pandas数据处理基础之筛选指定行或者指定列的数据

    pandas主要的两个数据结构是:series(相当于一行或一列数据机构)和DataFrame(相当于多行多列的一个表格数据机构). 本文为了方便理解会与excel或者sql操作行或列来进行联想类比 1.重新索引:reindex和ix 上一篇中介绍过数据读取后默认的行索引是0,1,2,3...这样的顺序号.列索引相当于字段名(即第一行数据),这里重新索引意思就是可以将默认的索引重新修改成自己想要的样子. 1.1 Series 比方说:data=Series([4,5,6],index=['a',

  • 浅谈pandas筛选出表中满足另一个表所有条件的数据方法

    今天记录一下pandas筛选出一个表中满足另一个表中所有条件的数据.例如: list1 结构:名字,ID,颜色,数量,类型. list1 = [['a',1,255,100,'03'],['a',2,481,50,'06'],['a',47,255,500,'03'],['b',3,1,50,'11']] list2结构:名字,类型,颜色. list2 = [['a','03',255],['a','06',481]] 如何在list1中找出所有与list2中匹配的元素?要得到下面的结果:lis

  • 使用Pandas对数据进行筛选和排序的实现

    筛选和排序是Excel中使用频率最多的功能,通过这个功能可以很方便的对数据表中的数据使用指定的条件进行筛选和计算,以获得需要的结果.在Pandas中通过.sort和.loc函数也可以实现这两 个功能..sort函数可以实现对数据表的排序操作,.loc函数可以实现对数据表的筛选操作.本篇文章将介绍如果通过Pandas的这两个函数完成Excel中的筛选和排序操作. 首选导入需要使用的Pandas库和numpy库,读取并创建数据表,将数据表命名为lc. import pandas as pd impo

  • pandas数据筛选和csv操作的实现方法

    1. 数据筛选 a b c 0 0 2 4 1 6 8 10 2 12 14 16 3 18 20 22 4 24 26 28 5 30 32 34 6 36 38 40 7 42 44 46 8 48 50 52 9 54 56 58 (1)单条件筛选 df[df['a']>30] # 如果想筛选a列的取值大于30的记录,但是之显示满足条件的b,c列的值可以这么写 df[['b','c']][df['a']>30] # 使用isin函数根据特定值筛选记录.筛选a值等于30或者54的记录 df

  • pandas按若干个列的组合条件筛选数据的方法

    还是用图说话 A文件: 比如,我想筛选出"设计井别"."投产井别"."目前井别"三列数据都为11的数据,结果如下: 当然,这里的筛选条件可以根据用户需要自由调整,代码如下: # -*- coding: utf-8 -*- """ Created on Wed Nov 29 10:46:31 2017 @author: wq """ import pandas as pd #input.c

  • pandas按条件筛选数据的实现

    pandas中对DataFrame筛选数据的方法有很多的,以后会后续进行补充,这里只整理遇到错误的情况. 1.使用布尔型DataFrame对数据进行筛选 使用一个条件对数据进行筛选,代码类似如下: num_red=flags[flags['red']==1] 使用多个条件对数据进行筛选,代码类似如下: stripes_or_bars=flags[(flags['stripes']>=1) | (flags['bars']>=1)] 常见的错误代码如下: 代码一: stripes_or_bars

  • pandas系列之DataFrame 行列数据筛选实例

    一.对DataFrame的认知 DataFrame的本质是行(index)列(column)索引+多列数据. 为了简化理解,我们不妨换个思路- 现实中,为了简化对一件事物的描述,我们会选择几个特征. 例如,从(性别.身高.学历.职业.爱好..)等角度去刻画一个人,这些"角度"即为"特征". 其中,不同的行表示不同的记录:列代表特征,不同记录因各个特征之间的差异而不同. DataFrame默认索引是序号(0,1,2-),可以理解成位置索引.一般我们用id标识不同记录,

  • 使用pandas实现筛选出指定列值所对应的行

    在pandas中怎么样实现类似mysql查找语句的功能: select * from table where column_name = some_value; pandas中获取数据的有以下几种方法: 布尔索引 位置索引 标签索引 使用API 假设数据如下: import pandas as pd import numpy as np df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(), 'B': 'one one

随机推荐