Pandas中常用日期操作

  这里只会介绍在使用Pandas过程中常用到的日期操作。

1. 构造日期类索引

  Pandas可以使用date_range()、period_range()、timedelta_range()等方法创建日期类索引,具体如下:

import pandas as pd
dt_index=pd.date_range(start='2022-01-01',periods=12,freq='MS')
pd_index=pd.period_range(start='2022-01-01',end='2023-12-01',freq='2M')
td_index=pd.timedelta_range(start='1 day',periods=10)

其结果如下:
Pandas中常用日期操作_第1张图片
这里要注意 date_range()中的freq参数取值范围: https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases

对于使用date_range()方法创造DatetimeIndex索引,可以和at_time()方法结合实现指定time数据的快速查找,具体举例如下:

import pandas as pd
dt_index=pd.date_range(start='2022-01-01',periods=10,freq='6H')
df=pd.DataFrame([[i+100] for i in range(10)],index=dt_index,columns=['col_1'])
print(df.at_time('06:00:00'))

其结果如下:
Pandas中常用日期操作_第2张图片

2. 将其他类型数据转换为日期类型
2.1 将str类型的日期数据转化为datetime类型

  通常使用pandas直接进行数据读取的时候,会将string类型保存的日期类型数据对应为object类型,这样很多日期类型的相关操作都无法进行。为了后续方便进行日期类操作,可以使用to_datetime()方法将string类型的数据转化为datetime类型。具体如下:

import pandas as pd
dt=pd.DataFrame([['2017-09-12','2021-01-04'],
                 ['2018-04-06','2018-07-04'],
                 ['2018-09-09','2019-11-24'],
                 ['2020-10-01','2021-07-06']],
               columns=['start_time','end_time'])
dt['start_time']=pd.to_datetime(dt['start_time'])
dt['end_time']=pd.to_datetime(dt['end_time'])

转化后的数据类型如下:
Pandas中常用日期操作_第3张图片

2.2 将时间戳转化为日期类型
import pandas as pd
dt=pd.DataFrame([[1,1544064499],
                 [2,1544064502],
                 [3,1544064556]],
               columns=['id','time_stamp'])
dt['time_str']=pd.to_datetime(dt['time_stamp'],unit='s',origin='unix')

其结果如下:
Pandas中常用日期操作_第4张图片

3 其他常用操作

  若pandas中的Series或DataFrame中的某一列为datetime64类型,那么该列支持pd.Series.dt中所有属性和方法。具体属性和方法可以参考:https://pandas.pydata.org/pandas-docs/stable/reference/series.html#accessors。这里仅简单举例如下:

dt['start_year']=dt['start_time'].dt.year #开始日期所在的年份
dt['start_leap']=dt['start_time'].dt.is_leap_year #开始日期所在的年份是否为闰年

dt的最终结果如下:
Pandas中常用日期操作_第5张图片

3.1 求两个日期相差的天数、月份数
dt['date_diff']=(dt['end_time']-dt['start_time']).dt.days
dt['month_diff']=(dt['end_time'].dt.year-dt['start_time'].dt.year)*12+\
				(dt['end_time'].dt.month-dt['start_time'].dt.month)

其结果如下:
Pandas中常用日期操作_第6张图片

3.2 按年、月进行汇总
import pandas as pd
dt=pd.DataFrame([['2017-09-12',30],
                 ['2018-04-06',17],
                 ['2018-04-09',76],
                 ['2020-10-01',34]],
               columns=['start_time','count'])
dt['start_time']=pd.to_datetime(dt['start_time'])
#只按月进行汇总
dt_1=dt.groupby(dt['start_time'].dt.month)['count'].sum()
#按年汇总
dt_2=dt.groupby(dt['start_time'].dt.year)['count'].sum()
#按年月汇总
dt_3=dt.groupby([dt['start_time'].dt.year,dt['start_time'].dt.month])['count'].sum()

其结果如下:
Pandas中常用日期操作_第7张图片

你可能感兴趣的:(Python,python)