网站年费,推荐专业做网站公司,有赞商城官网,甜品店网页模板htmlpandas有着强大的日期数据处理功能#xff0c;本期我们来了解下pandas处理日期数据的一些基本功能#xff0c;主要包括以下三个方面#xff1a;按日期筛选数据按日期显示数据按日期统计数据运行环境为 windows系统#xff0c;64位#xff0c;python3.5。1 读取并整理数据首…pandas有着强大的日期数据处理功能本期我们来了解下pandas处理日期数据的一些基本功能主要包括以下三个方面按日期筛选数据按日期显示数据按日期统计数据运行环境为 windows系统64位python3.5。1 读取并整理数据首先引入pandas库import pandas as pd从csv文件中读取数据df pd.read_csv(date.csv, headerNone)print(df.head(2))0 10 2013-10-24 31 2013-10-25 4整理数据df.columns [date,number]df[date] pd.to_datetime(df[date]) #将数据类型转换为日期类型df df.set_index(date) # 将date设置为indexprint(df.head(2))print(df.tail(2))print(df.shape)numberdate2013-10-24 32013-10-25 4numberdate2017-02-14 62017-02-22 6(425, 1)df的行数一共是425行。查看Dataframe的数据类型print(type(df))print(df.index)print(type(df.index))DatetimeIndex([2013-10-24, 2013-10-25, 2013-10-29, 2013-10-30,2013-11-04, 2013-11-06, 2013-11-08, 2013-11-12,2013-11-14, 2013-11-25,...2017-01-03, 2017-01-07, 2017-01-14, 2017-01-17,2017-01-23, 2017-01-25, 2017-01-26, 2017-02-07,2017-02-14, 2017-02-22],dtypedatetime64[ns], namedate, length425, freqNone)构造Series类型数据s pd.Series(df[number], indexdf.index)print(type(s))s.head(2)date2013-10-24 32013-10-25 4Name: number, dtype: int642 按日期筛选数据按年度获取数据print(---------获取2013年的数据-----------)print(df[2013].head(2)) # 获取2013年的数据print(df[2013].tail(2)) # 获取2013年的数据---------获取2013年的数据-----------numberdate2013-10-24 32013-10-25 4numberdate2013-12-27 22013-12-30 2获取2016至2017年的数据print(---------获取2016至2017年的数据-----------)print(df[2016:2017].head(2)) #获取2016至2017年的数据print(df[2016:2017].tail(2)) #获取2016至2017年的数据---------获取2016至2017年的数据-----------numberdate2016-01-04 42016-01-07 6numberdate2017-02-14 62017-02-22 6获取某月的数据print(---------获取某月的数据-----------)print(df[2013-11]) # 获取某月的数据---------获取某月的数据-----------numberdate2013-11-04 12013-11-06 32013-11-08 12013-11-12 52013-11-14 22013-11-25 12013-11-29 1获取具体某天的数据请注意dataframe类型的数据获取具体某天的数据时跟series是有些差异的详细情况如下述代码所示# 按日期筛选数据print(---------获取具体某天的数据-----------)# 获取具体某天的数据print(s[2013-11-06])# 获取具体某天的数据用datafrme直接选取某天时会报错而series的数据就没有问题# print(df[2013-11-06])#可以考虑用区间来获取某天的数据print(df[2013-11-06:2013-11-06])---------获取具体某天的数据-----------3numberdate2013-11-06 3dataframe的truncate函数可以获取某个时期之前或之后的数据或者某个时间区间的数据但一般建议直接用切片(slice)这样更为直观方便# dataframe的truncate函数可以获取某个时期之前或之后的数据或者某个时间区间的数据# 但一般建议直接用切片(slice)这样更为直观方便print(---------获取某个时期之前或之后的数据-----------)print(--------after------------)print(df.truncate(after 2013-11))print(--------before------------)print(df.truncate(before2017-02))---------获取某个时期之前或之后的数据-------------------after------------numberdate2013-10-24 32013-10-25 42013-10-29 22013-10-30 1--------before------------numberdate2017-02-07 82017-02-14 62017-02-22 63 按日期显示数据3.1 to_period()方法请注意df.index的数据类型是DatetimeIndexdf_peirod的数据类型是PeriodIndex按月显示但不统计df_period df.to_period(M) #按月显示但不统计print(type(df_period))print(type(df_period.index))# 请注意df.index的数据类型是DatetimeIndex# df_peirod的数据类型是PeriodIndexprint(df_period.head())numberdate2013-10 32013-10 42013-10 22013-10 12013-11 1按季度显示但不统计print(df.to_period(Q).head()) #按季度显示但不统计numberdate2013Q4 32013Q4 42013Q4 22013Q4 12013Q4 1按年度显示但不统计print(df.to_period(A).head()) #按年度显示但不统计numberdate2013 32013 42013 22013 12013 13.2 asfreq()方法按年度频率显示df_period.index.asfreq(A) # A默认是A-DEC,其他如A-JANPeriodIndex([2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013,2013, 2013,...2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017,2017, 2017],dtypeperiod[A-DEC], namedate, length425, freqA-DEC)df_period.index.asfreq(A-JAN) # A默认是A-DEC,其他如A-JANPeriodIndex([2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014,2014, 2014,...2017, 2017, 2017, 2017, 2017, 2017, 2017, 2018,2018, 2018],dtypeperiod[A-JAN], namedate, length425, freqA-JAN)按年度频率在不同情形下的显示可参考下图所示按季度频率显示df_period.index.asfreq(Q) # Q默认是Q-DEC,其他如“Q-SEP”“Q-FEB”PeriodIndex([2013Q4, 2013Q4, 2013Q4, 2013Q4, 2013Q4, 2013Q4,2013Q4, 2013Q4, 2013Q4, 2013Q4,...2017Q1, 2017Q1, 2017Q1, 2017Q1, 2017Q1, 2017Q1,2017Q1, 2017Q1, 2017Q1, 2017Q1],dtypeperiod[Q-DEC], namedate, length425, freqQ-DEC)df_period.index.asfreq(Q-SEP) # 可以显示不同的季度财年“Q-SEP”“Q-FEB”# df_period.index df_period.index.asfreq(Q-DEC) # 可以显示不同的季度财年“Q-SEP”“Q-FEB”# print(df_period.head())PeriodIndex([2014Q1, 2014Q1, 2014Q1, 2014Q1, 2014Q1, 2014Q1,2014Q1, 2014Q1, 2014Q1, 2014Q1,...2017Q2, 2017Q2, 2017Q2, 2017Q2, 2017Q2, 2017Q2,2017Q2, 2017Q2, 2017Q2, 2017Q2],dtypeperiod[Q-SEP], namedate, length425, freqQ-SEP)按季度频率在不同情形下的显示可参考下图所示按月度频率显示df_period.index.asfreq(M) # 按月份显示PeriodIndex([2013-10, 2013-10, 2013-10, 2013-10, 2013-11, 2013-11,2013-11, 2013-11, 2013-11, 2013-11,...2017-01, 2017-01, 2017-01, 2017-01, 2017-01, 2017-01,2017-01, 2017-02, 2017-02, 2017-02],dtypeperiod[M], namedate, length425, freqM)按工作日显示method 1df_period.index.asfreq(B, howstart) # 按工作日期显示PeriodIndex([2013-10-01, 2013-10-01, 2013-10-01, 2013-10-01,2013-11-01, 2013-11-01, 2013-11-01, 2013-11-01,2013-11-01, 2013-11-01,...2017-01-02, 2017-01-02, 2017-01-02, 2017-01-02,2017-01-02, 2017-01-02, 2017-01-02, 2017-02-01,2017-02-01, 2017-02-01],dtypeperiod[B], namedate, length425, freqB)method 2df_period.index.asfreq(B, howend) # 按工作日期显示PeriodIndex([2013-10-31, 2013-10-31, 2013-10-31, 2013-10-31,2013-11-29, 2013-11-29, 2013-11-29, 2013-11-29,2013-11-29, 2013-11-29,...2017-01-31, 2017-01-31, 2017-01-31, 2017-01-31,2017-01-31, 2017-01-31, 2017-01-31, 2017-02-28,2017-02-28, 2017-02-28],dtypeperiod[B], namedate, length425, freqB)4 按日期统计数据4.1按日期统计数据按周统计数据print(df.resample(w).sum().head())# “w”weeknumberdate2013-10-27 7.02013-11-03 3.02013-11-10 5.02013-11-17 7.02013-11-24 NaN按月统计数据print(df.resample(M).sum().head())# MS是每个月第一天为开始日期, M是每个月最后一天numberdate2013-10-31 102013-11-30 142013-12-31 272014-01-31 162014-02-28 4按季度统计数据print(df.resample(Q).sum().head())# QS是每个季度第一天为开始日期, Q是每个季度最后一天numberdate2013-12-31 512014-03-31 732014-06-30 962014-09-30 1362014-12-31 148按年统计数据print(df.resample(AS).sum())# AS是每年第一天为开始日期, A是每年最后一天numberdate2013-01-01 512014-01-01 4532015-01-01 7432016-01-01 15522017-01-01 92关于日期的类型按参考下图所示来选择合适的分期频率4.2 按日期统计后按年或季度或月份显示按年统计并显示print(df.resample(AS).sum().to_period(A))# 按年统计并显示numberdate2013 512014 4532015 7432016 15522017 92按季度统计并显示print(df.resample(Q).sum().to_period(Q).head())# 按季度统计并显示numberdate2013Q4 512014Q1 732014Q2 962014Q3 1362014Q4 148按月度统计并显示print(df.resample(M).sum().to_period(M).head())# 按月度统计并显示numberdate2013-10 102013-11 142013-12 272014-01 162014-02 4