腾讯算法大赛

腾讯广告算法大赛之——Python 时间戳→次日日期

2019-05-10  本文已影响146人  Neural_PDE

很多时候我们需要统计第二天的内容,那么如何由时间戳得到第二日的日期呢?

以下是详细的代码:(后文还有简单易用的函数包奉上)

import pandas as pd
import time,datetime
df=pd.DataFrame({"时间戳":[1301419600,1301419600]})

##时间戳(1529648412)列→(2018-06-22 06:20:12)
df['时间']=pd.to_datetime(df['时间戳'],unit='s') #→(2018-06-22 06:20:12)

##(2018-06-22 06:20:12) → (2018-06-22)
df=df.set_index('时间')    #把时间设置为索引(为了转化)
df["当日日期"]=df.index.date  #转化为当日日期(2018-06-22)
df=df.reset_index()

################(2018-06-22) → 年 月 日 → (20180622)
df["年"]=df["当日日期"].map(str).str[0:4]
df["月"]=df["当日日期"].map(str).str[5:7]
df["日"]=df["当日日期"].map(str).str[8:]
df["日期"]=df["年"]+df["月"]+df["日"]

from datetime import datetime
###########任意时间格式→时间戳
def time2stamp(cmnttime):   
    cmnttime=datetime.strptime(cmnttime,'%Y%m%d')#这里可以更改任意格式:'%Y-%m-%d %H:%M:%S'
    stamp=int(datetime.timestamp(cmnttime))
    return stamp
df['前一天16点时间戳']=df['日期'].apply(time2stamp)

###########################检查时间戳对应的时间
df['时间2']=pd.to_datetime(df['前一天16点时间戳'],unit='s')

df=df.set_index('时间2')    #把时间设置为索引(为了转化)
df["前一天日期"]=df.index.date  #转化为日期(2018-06-22)
df=df.reset_index()
df.head() 

##############给时间戳增减一天对应的数量(86400)
df[['后一天16点时间戳']]=df.loc[:, ['前一天16点时间戳']] +86400*2
###########################检查时间戳对应的时间
df['时间3']=pd.to_datetime(df['后一天16点时间戳'],unit='s')
df.head(2)

df=df.set_index('时间3')    #把时间设置为索引(为了转化)
df["次日日期"]=df.index.date  #转化为日期(2018-06-22)
df=df.reset_index()
df.head() 

###############减少一些不必要的列###############
df=df[['时间戳', '当日日期','前一天日期','次日日期']]
df

函数包及其用法

##### 调用次日日期函数包  #######
def next_day(时间戳列):
    import pandas as pd
    import time,datetime
    df=pd.DataFrame() #定义一个函数内部df,否则会报错
    
    df['当日日期'] = 时间戳列.apply(lambda x:time.strftime("%Y-%m-%d",time.localtime(x))) 

    ################(2018-06-22) → 年 月 日 → (20180622)
    df["年"]=df["当日日期"].map(str).str[0:4]
    df["月"]=df["当日日期"].map(str).str[5:7]
    df["日"]=df["当日日期"].map(str).str[8:]
    df["日期"]=df["年"]+df["月"]+df["日"]

    from datetime import datetime
    ###########任意时间格式→时间戳
    def time2stamp(cmnttime):   
        cmnttime=datetime.strptime(cmnttime,'%Y%m%d')#这里可以更改任意格式:'%Y-%m-%d %H:%M:%S'
        stamp=int(datetime.timestamp(cmnttime))
        return stamp
    df['前一天16点时间戳']=df['日期'].apply(time2stamp)

    ###########################检查时间戳对应的时间
    df['时间2']=pd.to_datetime(df['前一天16点时间戳'],unit='s')
    df=df.set_index('时间2')    #把时间设置为索引(为了转化)
    df["前一天日期"]=df.index.date  #转化为日期(2018-06-22)
    df=df.reset_index()

    ##############给时间戳增减一天对应的数量(86400)
    df[['后一天16点时间戳']]=df.loc[:, ['前一天16点时间戳']] +86400*2
    ###########################检查时间戳对应的时间
    df['时间3']=pd.to_datetime(df['后一天16点时间戳'],unit='s')


    df=df.set_index('时间3')    #把时间设置为索引(为了转化)
    df["次日日期"]=df.index.date  #转化为日期(2018-06-22)
    df=df.reset_index()
    ###############减少一些不必要的列###############
    df=df[['当日日期','前一天日期','次日日期']]
    return df["次日日期"]

##### 调用前一日日期函数包  #######
def pre_day(时间戳列):
    import pandas as pd
    import time,datetime
    df=pd.DataFrame() #定义一个函数内部df,否则会报错
    
    df['当日日期'] =时间戳列.apply(lambda x:time.strftime("%Y-%m-%d",time.localtime(x))) 

    ################(2018-06-22) → 年 月 日 → (20180622)
    df["年"]=df["当日日期"].map(str).str[0:4]
    df["月"]=df["当日日期"].map(str).str[5:7]
    df["日"]=df["当日日期"].map(str).str[8:]
    df["日期"]=df["年"]+df["月"]+df["日"]

    from datetime import datetime
    ###########任意时间格式→时间戳
    def time2stamp(cmnttime):   
        cmnttime=datetime.strptime(cmnttime,'%Y%m%d')#这里可以更改任意格式:'%Y-%m-%d %H:%M:%S'
        stamp=int(datetime.timestamp(cmnttime))
        return stamp
    df['前一天16点时间戳']=df['日期'].apply(time2stamp)

    ###########################检查时间戳对应的时间
    df['时间2']=pd.to_datetime(df['前一天16点时间戳'],unit='s')
    df=df.set_index('时间2')    #把时间设置为索引(为了转化)
    df["前一天日期"]=df.index.date  #转化为日期(2018-06-22)
    df=df.reset_index()

    ##############给时间戳增减一天对应的数量(86400)
    df[['后一天16点时间戳']]=df.loc[:, ['前一天16点时间戳']] +86400*2
    ###########################检查时间戳对应的时间
    df['时间3']=pd.to_datetime(df['后一天16点时间戳'],unit='s')


    df=df.set_index('时间3')    #把时间设置为索引(为了转化)
    df["次日日期"]=df.index.date  #转化为日期(2018-06-22)
    df=df.reset_index()
    ###############减少一些不必要的列###############
    df=df[['当日日期','前一天日期','次日日期']]
    return df["前一天日期"]

函数包使用方法:

###首先创建一个时间戳列
import pandas as pd
df=pd.DataFrame({"时间戳":[1557532110,1557532110]})
###使用函数包
df["次日日期"]=next_day(df["时间戳"])
df["前日日期"]=pre_day(df["时间戳"])
#获取当日日期
df['当日日期'] = df['时间戳'] .apply(lambda x:time.strftime("%Y-%m-%d",time.localtime(x))) #此处任意格式%Y-%m-%d %H:%M:%S
#展示结果
df
展示结果

If you are interested in this topic.
You can get in touch with me.
18234056952(Tel WeChat qq)

上一篇下一篇

猜你喜欢

热点阅读