• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
yeungg2017 显示全部楼层 发表于 2021-10-25 19:55:23 |阅读模式 打印 上一主题 下一主题
pandas 是 python 中一个功能强大的库,这里就不再复述了,简朴先容下用日期范围筛选 pandas 数据。
日期转换


用来筛选的列是 date 类型,以是这里要把要筛选的日期范围从字符串转成 date 类型
好比我的数据包罗列名为 trade_date,从 20050101 - 20190926 的数据,我要筛选出 20050606 - 20071016 的数据,那么,先如下转换数据类型:
  1. s_date = datetime.datetime.strptime('20050606', '%Y%m%d').date()
  2. e_date = datetime.datetime.strptime('20071016', '%Y%m%d').date()
复制代码
数据筛选


非常简朴,一行代码就搞定了:
  1. df = df[(df['tra_date'] >= s_date) & (df['tra_date'] <= e_date)]
复制代码
注意事项
      
  • 多个筛选条件并存时,不能用 and 连接,必要用单个 & 符号。  
  • s_date <= df['trade_date'] <= e_date 等同于 and
pandas提取某段时间范围数据的五种方法
  1. import pandas as pd
  2. #读取文件
  3. df = pd.read_csv('./TianQi.csv')
  4. #获取九月份数据的几种方法
  5. #方法一  使用行索引切片,['2019/9/1':'2019/9/30'],缺点是要求日期必须是连续的。为了方便查看取前5条,以下其他方法均取前5条,由于未进行排序,顺序会有差异
  6. df.set_index('日期',inplace=True)
  7. print(df['2019/9/1':'2019/9/30'].head())  #或者print(df.loc['2019/9/1':'2019/9/30',:])
  8. '''
  9. 打印:
  10.      最高温度 最低温度  天气  风向 风级 空气质量
  11. 日期                  
  12. 2019/9/1 33℃ 19℃ 多云~晴 西南风 2级  良
  13. 2019/9/2 34℃ 20℃   晴  南风 2级  良
  14. 2019/9/3 33℃ 20℃   晴 东南风 2级  良
  15. 2019/9/7 34℃ 21℃   晴 西南风 2级  良
  16. 2019/9/8 35℃ 22℃ 晴~多云 东北风 2级  良
  17. '''
  18. #方法二  利用列表生成式和startwith('2019/9')生成bool列表,缺点,比较麻烦。
  19. print(df.loc[[True if i.startswith('2019/9') else False for i in df.index.tolist()],:].head())
  20. '''
  21. 打印:
  22.      最高温度 最低温度  天气  风向 风级 空气质量
  23. 日期                  
  24. 2019/9/4 32℃ 19℃   晴 东南风 2级  良
  25. 2019/9/5 33℃ 20℃   晴 东南风 2级  良
  26. 2019/9/6 33℃ 20℃   晴 东南风 1级  良
  27. 2019/9/1 33℃ 19℃ 多云~晴 西南风 2级  良
  28. 2019/9/2 34℃ 20℃   晴  南风 2级  良
  29. '''
  30. #方法三  利用pandas的str和startswith('2019/9')|contains('2019/9')。
  31. df1 = pd.read_csv('./TianQi.csv')
  32. print(df1[df1['日期'].str.startswith('2019/9')].head())
  33. '''
  34. 打印:
  35.      日期 最高温度 最低温度  天气  风向 风级 空气质量
  36. 243 2019/9/4 32℃ 19℃   晴 东南风 2级  良
  37. 244 2019/9/5 33℃ 20℃   晴 东南风 2级  良
  38. 245 2019/9/6 33℃ 20℃   晴 东南风 1级  良
  39. 246 2019/9/1 33℃ 19℃ 多云~晴 西南风 2级  良
  40. 247 2019/9/2 34℃ 20℃   晴  南风 2级  良
  41. '''
  42. #方法四  讲日期转换成datetime类型
  43. df1['日期'] = pd.to_datetime(df1['日期'])
  44. df1.set_index('日期',inplace=True,drop=True)
  45. #print(df1['2019'])  #取2019年数据,或者df.loc['2019']
  46. print(df1['2019/09'].head())  
  47. '''
  48. 取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',:]
  49. 打印:
  50.       最高温度 最低温度  天气  风向 风级 空气质量
  51. 日期                  
  52. 2019-09-04 32℃ 19℃   晴 东南风 2级  良
  53. 2019-09-05 33℃ 20℃   晴 东南风 2级  良
  54. 2019-09-06 33℃ 20℃   晴 东南风 1级  良
  55. 2019-09-01 33℃ 19℃ 多云~晴 西南风 2级  良
  56. 2019-09-02 34℃ 20℃   晴  南风 2级  良
  57. '''
  58. #注意如果要获取某一天的数据,则必须使用切片,比如df['2019/9/1':'2019/9/1']
  59. '''
  60. 获取一段时间
  61. df1.truncate(after = '2019-9-01') # 返回 after 以前的数据
  62. df1.truncate(before = '2019-9-01') # 返回 before 以后的数据
  63. df1['20190901':'2019/9/10']
  64. '''
  65. #方法五  #读取文件时,通过parse_dates=['日期'],将日期转化为datetime类型,相当于 pd.to_datetime。同时可以使用index_col将那一列作为的行索引,相当有set_index。
  66. df2 = pd.read_csv('./TianQi.csv',parse_dates=['日期'])
  67. df2['年'] = df2['日期'].dt.year
  68. df2['月'] = df2['日期'].dt.month
  69. qstr = "年=='2019' and 月=='9'"
  70. print(df2.query(qstr).head())
  71. '''
  72. 打印:
  73.       日期 最高温度 最低温度  天气  风向 风级 空气质量   年 月
  74. 243 2019-09-04 32℃ 19℃   晴 东南风 2级  良 2019 9
  75. 244 2019-09-05 33℃ 20℃   晴 东南风 2级  良 2019 9
  76. 245 2019-09-06 33℃ 20℃   晴 东南风 1级  良 2019 9
  77. 246 2019-09-01 33℃ 19℃ 多云~晴 西南风 2级  良 2019 9
  78. 247 2019-09-02 34℃ 20℃   晴  南风 2级  良 2019 9
  79. '''
  80. '''
  81. dt的其他常用属性和方法如下:
  82. df['日期'].dt.day  # 提取日期
  83. df['日期'].dt.year # 提取年份
  84. df['日期'].dt.hour # 提取小时
  85. df['日期'].dt.minute # 提取分钟
  86. df['日期'].dt.second # 提取秒
  87. df['日期'].dt.week # 一年中的第几周
  88. df['日期'].dt.weekday # 返回一周中的星期几,0代表星期一,6代表星期天
  89. df['日期'].dt.dayofyear # 返回一年的第几天
  90. df['日期'].dt.quarter # 得到每个日期分别是第几个季度。
  91. df['日期'].dt.is_month_start # 判断日期是否是每月的第一天
  92. df['日期'].dt.is_month_end # 判断日期是否是每月的最后一天
  93. df['日期'].dt.is_leap_year # 判断是否是闰年
  94. df['日期'].dt.month_name() # 返回月份的英文名称
  95. df['日期'].dt.to_period('Q') # M 表示月份,Q 表示季度,A 表示年度,D 表示按天
  96. df['日期'].dt.weekday_name # 返回星期几的英文 由于pandas版本问题,改变pandas版本在cmd中输入:pip install --upgrade pandas==0.25.3
  97. Series.dt.normalize() # 函数将给定系列对象中的时间转换为午夜。
  98. '''
复制代码
到此这篇关于pandas 按日期范围筛选数据的实现的文章就先容到这了,更多相干pandas 日期范围筛选内容请搜索草根技术分享以前的文章或继承欣赏下面的相干文章盼望大家以后多多支持草根技术分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作