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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 ⽇期范围筛选内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

相关文档
最新文档