pandas 日期处理

来源:互联网 发布:个人如何注册淘宝店铺 编辑:程序博客网 时间:2024/05/22 22:48

1、时间字符串,提取日期、小时

    USER_ID  SHOP_ID             TIME_STA        DATE  HOUR0  22127870     1862  2015-12-25 17:00:00  2015-12-25    171   3434231     1862  2016-10-05 11:00:00  2016-10-05    11df['DATE'] = pd.to_datetime(df['TIME_STA']).dt.datedf['HOUR'] = pd.to_datetime(df['TIME_STA']).dt.hour


2、日期转换为字符串  DATE 转换为TIME_STA

pd.to_datetime(df['DATE'])


datetime.datetime.strptime('20150626','%Y%m%d') Out[25]: datetime.datetime(2015, 6, 26, 0, 0)(datetime.datetime.strptime('20150626','%Y%m%d') + datetime.timedelta(days=1)).date()Out[26]: datetime.date(2015, 6, 27)str((datetime.datetime.strptime('20150626','%Y%m%d') + datetime.timedelta(days=1)).date())Out[27]: '2015-06-27'str(datetime.datetime.strptime('20150626','%Y%m%d') )Out[28]: '2015-06-26 00:00:00'
PAYNW_TAB.columns = [str((datetime.datetime.strptime('20150626','%Y%m%d') + datetime.timedelta(days=x)).date()) for x in range( PAYNW_TAB.shape[1])]

3、dayofyear、dayofweek

#销售日期:20140213train['day'] = train['销售日期'].map(lambda x: str(x)[-2:]).astype(int)train['sale_m'] = train['销售日期'].map(lambda x: str(x)[4:6]).astype(int) # 1234train['week'] = train['销售日期'].map(lambda x: pd.to_datetime(str(x)).dayofweek+1)
# time : 20141118 18data['time'] = pd.to_datetime(data['time'])    # 18 转换为 18:00:00data['dayofyear'] = data['time'].dt.dayofyear  # pandas  用天数来表示日期,一年中的第*天dindex = data[data['dayofyear'] == pd.to_datetime('2014-12-12').dayofyear].index.values  # 取其索引值data = data.drop(dindex,axis=0,inplace = False)

4、两日期间相隔的天数、秒数

import datetimed1 = datetime.datetime.strptime('2015-03-05 17:41:20', '%Y-%m-%d %H:%M:%S')d2 = datetime.datetime.strptime('2015-03-02 17:41:20', '%Y-%m-%d %H:%M:%S')delta = d1 - d2

5、相隔的小时数

df_time = df_part_1[df_part_1['time'] >= np.datetime64('2014-11-27')]df_time['diff_hours'] = df_time['diff_time'].apply(lambda x: x.days * 24 + x.seconds//3600)  # //:取整

6、今天往后n天的日期

mport datetimenow = datetime.datetime.now()delta = datetime.timedelta(days=3)n_days = now + deltaprint n_days.strftime('%Y-%m-%d %H:%M:%S')  输出:2017-11-18 19:16:34


7、生成日期索引,及相应星期  date_range(start=' ',end=' ',freq=‘D’)、weekday()  ;D表示天,freq='12H',则每12小时计算一次,eg:

DatetimeIndex(['2016-10-28 00:00:00', '2016-10-28 12:00:00',               '2016-10-29 00:00:00', '2016-10-29 12:00:00',               '2016-10-30 00:00:00', '2016-10-30 12:00:00',               '2016-10-31 00:00:00'],              dtype='datetime64[ns]', freq='12H')

timerange = pd.date_range('2016-1-1', '2016-10-31', freq='D')weeknum = timerange.weekday
Out[18]: Int64Index([4, 5, 6, 0], dtype='int64')


8、获取日期列表

import pandas as pdimport datetimedef datelist(start, end):    start_date = datetime.date(*start)    end_date = datetime.date(*end)    result = []    curr_date = start_date    while curr_date != end_date:        ymd="%04d%02d%02d" % (curr_date.year, curr_date.month, curr_date.day)        result.append(int(ymd))        curr_date += datetime.timedelta(1)    result.append(int(ymd))    return resultalltime_set=set(datelist((2016, 7, 1), (2016, 10, 31)))alltime_set
{20160701, 20160702, 20160703, 20160704, 20160705, 20160706,..., 20161030}



9、以为可以在读取时直接解析日期,见另一篇 读取csv、pickle的博客

原创粉丝点击