Объединение даты и времени (отметка времени) в списке фреймов данных - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу объединить дату и время в одну временную метку в списке фреймов данных и назначить неделю до даты звонка.

Вот ошибка: 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 голосов
/ 08 декабря 2018

Используйте Series.str.split с индексированием str[0], а затем to_datetime с параметрами errors='coerce' для 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]
...