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提取某段时间范围数据的五种方法
importpandasaspd #读取文件 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/133℃19℃多云~晴西南风2级良 2019/9/234℃20℃晴南风2级良 2019/9/333℃20℃晴东南风2级良 2019/9/734℃21℃晴西南风2级良 2019/9/835℃22℃晴~多云东北风2级良 ''' #方法二利用列表生成式和startwith('2019/9')生成bool列表,缺点,比较麻烦。 print(df.loc[[Trueifi.startswith('2019/9')elseFalseforiindf.index.tolist()],:].head()) ''' 打印: 最高温度最低温度天气风向风级空气质量 日期 2019/9/432℃19℃晴东南风2级良 2019/9/533℃20℃晴东南风2级良 2019/9/633℃20℃晴东南风1级良 2019/9/133℃19℃多云~晴西南风2级良 2019/9/234℃20℃晴南风2级良 ''' #方法三利用pandas的str和startswith('2019/9')|contains('2019/9')。 df1=pd.read_csv('./TianQi.csv') print(df1[df1['日期'].str.startswith('2019/9')].head()) ''' 打印: 日期最高温度最低温度天气风向风级空气质量 2432019/9/432℃19℃晴东南风2级良 2442019/9/533℃20℃晴东南风2级良 2452019/9/633℃20℃晴东南风1级良 2462019/9/133℃19℃多云~晴西南风2级良 2472019/9/234℃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-0432℃19℃晴东南风2级良 2019-09-0533℃20℃晴东南风2级良 2019-09-0633℃20℃晴东南风1级良 2019-09-0133℃19℃多云~晴西南风2级良 2019-09-0234℃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()) ''' 打印: 日期最高温度最低温度天气风向风级空气质量年月 2432019-09-0432℃19℃晴东南风2级良20199 2442019-09-0533℃20℃晴东南风2级良20199 2452019-09-0633℃20℃晴东南风1级良20199 2462019-09-0133℃19℃多云~晴西南风2级良20199 2472019-09-0234℃20℃晴南风2级良20199 ''' ''' 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中输入:pipinstall--upgradepandas==0.25.3 Series.dt.normalize()#函数将给定系列对象中的时间转换为午夜。 '''
到此这篇关于pandas按日期范围筛选数据的实现的文章就介绍到这了,更多相关pandas日期范围筛选内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。