在数据框列表中组合日期和时间(时间戳)

时间:2018-12-08 07:15:53

标签: python pandas timestamp unix-timestamp valueerror

我希望将日期和时间合并到一个数据帧列表中的一个时间戳中,并指定呼叫日期为一周。

这是错误:     ValueError:无法将字符串转换为时间戳

我使用了以下功能:

def new_call_time(df):
    i=0
    df[' CALL_DATE_MANIPULATED']=str(df['CALL_DATE'][i]).split()[0] + ' ' + str(df['CALL_TIME'][i]) 
    df[' UNIX_TIME']= pd.Timestamp(df[' CALL_DATE_MANIPULATED'][i]).value//10 ** 9 
    df[' WEEK']=''

    for i in range(len(df)):
        df[' CALL_DATE_MANIPULATED'][i]=str(df['CALL_DATE'][i]).split()[0] + ' ' + str(df['CALL_TIME'][i])
        df[' UNIX_TIME'][i]= pd.Timestamp(df[' CALL_DATE_MANIPULATED'][i]).value// 10 ** 9
        df[' WEEK'][i]=df[' UNIX_TIME'][i]//604800

return df

这是函数调用语句:

for df in data_frame : 
    df = new_call_time(df)

这是我从excel工作表中读取的表(包含在名为data_frame的列表中):

    CALL_DATE    CALL_TIME
    01-JAN-2016  00:15:06   
    01-JAN-2016  07:07:00

    CALL_DATE    CALL_TIME
    01-JAN-2016  08:40:38   
    01-JAN-2016  08:44:14   

    CALL_DATE    CALL_TIME
    01-JAN-2016  08:51:10   
    01-JAN-2016  09:06:31

这适用于单个数据框,但不适用于数据框列表。

新表也应具有以下列: 例如:data_frame [0]-

     CALL_DATE       CALL_TIME  CALL_DATE_MANIPULATED UNIX_TIME  WEEK
     01-JAN-2016     00:15:06   01-JAN-2016 00:15:06  1451607306 2400   
     01-JAN-2016     07:07:00   01-JAN-2016 07:07:00  1451632020 2400

非常感谢:)))

1 个答案:

答案 0 :(得分:1)

如果某些值与str[0]中定义的格式不匹配,则将Series.str.split用于索引errors='coerce',然后将to_datetime与参数NaT用于format(参数格式是为了获得更好的性能,但应将其省略):

def new_call_time(df):
    df['CALL_DATE_MANIPULATED'] = (df['CALL_DATE'].astype(str).str.split().str[0] + ' ' + 
                                   df['CALL_TIME'].astype(str))
    dates = pd.to_datetime(df['CALL_DATE_MANIPULATED'], 
                           errors='coerce', 
                           format='%d-%b-%Y %H:%M:%S')
    df['UNIX_TIME'] = dates.values.astype(np.int64) // 10 ** 9
    df['WEEK'] = df['UNIX_TIME'] //604800
    return df

列表推导中对新list of DataFrames的调用函数:

data_frame1 = [new_call_time(df) for df in data_frame]