栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Pandas处理日期数据

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pandas处理日期数据

Pandas处理日期数据
    • 依据前缀查询
    • 方便的获取周、月、季度
  • date_range() 函数
    • 连续日期 (连续日历日)
    • 中间隔一天
    • 工作日
    • 每月的第一天
    • 每月的最后一天
    • 季度末
    • freq参数表

Pandas时间官网文档:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html

Pandas日期处理,可以将2018-01-01、1/1/2018等多种日期格式映射成统一的格式对象,在该对象上提供强大的功能支持。

几个概念:

  1. .to_datetime:pandas的一个函数,能将字符串、列表、series变成日期形式
  2. Timestamp:pandas表示日期的对象形式
  3. DatetimeIndex:pandas表示日期的对象列表形式

其中:

  • DatetimeIndex是Timestamp的列表形式
  • pd.to_datetime对单个日期字符串处理会得到Timestamp
  • pd.to_datetime对日期字符串列表处理会得到DatetimeIndex


此部分来源于B站up主https://space.bilibili.com/61036655

import pandas as pd
df = pd.read_csv('F:\Temp\datas\Tianqi_2018.csv')
df['time_copy'] = pd.to_datetime(df['time'])
df.set_index(pd.to_datetime(df["time"]), inplace=True)
print(df.head())
df.head() df.info()

将索引设置成时间格式,是为了方便的对DatetimeIndex进行查询。下面开始演示。

依据前缀查询
# 下面两行代码,哪怕索引不是datetime形式,也能查的出来
# 筛选固定的某一天
print(df.loc['2018-01-05'])
# 日期区间
print(df.loc['2018-01-05':'2018-01-10'])
# 按月份前缀筛选(若索引不是datetime形式的,会报错)
print(df.loc['2018-03'])

# 若是 print(df.loc[df['time_copy']=='2018-03'])   虽然数据类型没问题,但只能输出3月1号这一行的数据
# 注意括号位置  符号&不能替换为and
# 它与 df.loc[(df['time_copy']>='2018-03-01') & (df['time_copy']<='2018-03-31')] 结果一样,所以对于逻辑判断来说,数据类型不影响结果
print(df.loc[(df['time']>='2018-03-01') & (df['time']<='2018-03-31')])


# 按月份前缀筛选(若索引是字符串类型,那么只有2018-07-01到2018-08-31 62行)
print(df.loc["2018-07":"2018-09"])


# 按年份前缀筛选(若索引是字符串类型,直接报错)
print(df.loc["2018"])
方便的获取周、月、季度

https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#time-date-components

# 获取州 月 季度数字列表(这只对index有用,time_copy列不行)
print(df.index.week)
print(df.index.month)
print(df.index.quarter)

统计每周、每月、每个季度的最高温度(也可以统计最低均值)

# 统计每周的最高温
print(df.groupby(df.index.week)["bWendu"].max())

# 统计每月的最高温
print(df.groupby(df.index.month)["bWendu"].max())

# 统计每个季度的最高温
print(df.groupby(df.index.quarter)["bWendu"].max())
date_range() 函数

注意freq=的参数,本节末有参数表。
date_range()起止参数包括其自身。 也可以像Python的range()一样,使用closed参数(closed=‘left’ or closed=‘right’)

连续日期 (连续日历日)
import pandas as pd
print(pd.date_range(start='2021-6-1',end='2021-6-10'))
print()
print(pd.date_range(start='2021-6-1',periods=10))
'''
DatetimeIndex(['2021-06-01', '2021-06-02', '2021-06-03', '2021-06-04',
               '2021-06-05', '2021-06-06', '2021-06-07', '2021-06-08',
               '2021-06-09', '2021-06-10'],
              dtype='datetime64[ns]', freq='D')
'''
中间隔一天
import pandas as pd
print(pd.date_range(start='2021-6-1',end='2021-6-10', freq='2D'))
'''
DatetimeIndex(['2021-06-01', '2021-06-03', '2021-06-05', '2021-06-07',
               '2021-06-09'],
              dtype='datetime64[ns]', freq='2D')
'''
工作日
import pandas as pd
print(pd.date_range(start='2021-6-1',end='2021-6-10', freq='B'))
'''
DatetimeIndex(['2021-06-01', '2021-06-02', '2021-06-03', '2021-06-04',
               '2021-06-07', '2021-06-08', '2021-06-09', '2021-06-10'],
              dtype='datetime64[ns]', freq='B')
'''
每月的第一天
import pandas as pd
print(pd.date_range(start='2020-1-1',end='2020-12-31',freq='MS'))
'''
DatetimeIndex(['2020-01-01', '2020-02-01', '2020-03-01', '2020-04-01',
               '2020-05-01', '2020-06-01', '2020-07-01', '2020-08-01',
               '2020-09-01', '2020-10-01', '2020-11-01', '2020-12-01'],
              dtype='datetime64[ns]', freq='MS')
'''
每月的最后一天
import pandas as pd
print(pd.date_range(start='2020-1-1',end='2020-12-31',freq='M'))
'''
DatetimeIndex(['2020-01-31', '2020-02-29', '2020-03-31', '2020-04-30',
               '2020-05-31', '2020-06-30', '2020-07-31', '2020-08-31',
               '2020-09-30', '2020-10-31', '2020-11-30', '2020-12-31'],
              dtype='datetime64[ns]', freq='M')
'''
季度末
import pandas as pd
print(pd.date_range(start='2020-1-1',end='2020-12-31', freq='Q'))
'''
DatetimeIndex(['2020-03-31', '2020-06-30', '2020-09-30', '2020-12-31'], dtype='datetime64[ns]', freq='Q-DEC')
'''
freq参数表

官网:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases

freq描述freq描述freq描述
B工作日频率SMS每半月第一个日历日(第 1 天和第 15 天)AS,YS每年的第一个日历日
C自定义工作日频率BMS每月第一个工作日BAS,BYS每年的第一个工作日
D日历日频率CBMS自定义每月第一个工作日BH工作日按“时”的频率
W每周频率Q季度最后一个月的最后一个日历日H每小时频率
M月末频率BQ季度最后一个月的最后一个工作日T,min每分钟频率
SM半月末频率(15 日和月末)QS季度最后一个月的第一个日历日S秒频率
BM每月最后一个工作日BQS季度最后一个月的第一个工作日L,ms毫秒频率
CBM自定义每月最后一个工作日A,Y每年的最后一个日历日U,us微秒频率
MS每月第一个日历日BA,BY每年的最后一个工作日N纳秒频率
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/619345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号