Объединить два даты и времени в строковый диапазон дат

У меня есть кадр данных pandas.

Data = pd.DataFrame([[datetime.datetime(2014,1,1),datetime.datetime(2014,1,3)]],columns=['date1','date2')

Этот кадр данных имеет два столбца даты и времени date1 и date2.

Я хочу создать новый столбец, содержащий строку в следующем формате:

'1/1/2014 - 1/3/2014'

Прямо сейчас у меня есть эта настройка для создания нового столбца, но он сохраняет конечный hms:

Data['range'] = Data.apply(lambda x:'%s - %s' % (x['date1'],x['date2']),axis=1)

Мне трудно удалить только дату, так как я работаю с двумя столбцами, а не с двумя значениями. Любые указатели?


person Chris    schedule 13.12.2014    source источник
comment
Пример ваших данных был бы полезен. И что вы имеете в виду, говоря, что это трудно? вы получаете какие-либо ошибки или неправильные результаты? любые примеры будут полезны.   -  person Marcin    schedule 13.12.2014
comment
Под «трудно найти» я имею в виду, что strptime для x['datex'] не работает, потому что это ряды, а не значения, и я не могу применить его к x в лямбда-выражении x или использовать %Y%M%d вместо % с. Например, date1 = datetime.datetime(2014,1,1) и date2 = datetime.datetime(2014,1,3).   -  person Chris    schedule 13.12.2014


Ответы (2)


Мне трудно удалить только дату, так как я работаю с двумя столбцами, а не с двумя значениями.

Что ж, поскольку вы уже используете apply, вы имеете дело с двумя значениями (а не столбцами), поэтому вы можете вызвать метод date для каждого:

Data.apply(
    lambda x: '%s - %s' % ( xdate1.date() , x.date2.date() ),
    axis=1)

x, переданный вашей лямбда-функции, представляет собой одну строку вашего фрейма данных, поэтому доступ к x.date1 (или x['date1']) дает одно значение типа Timestamp. Из этого легко извлечь только дату.

person shx2    schedule 13.12.2014
comment
Гладкий. Еще не знал о функции .date(), так что это, вероятно, поможет мне в будущем. Огромное спасибо! - person Chris; 13.12.2014

Я думаю, это должно помочь:

import pandas as pd
from datetime import datetime

Data = pd.DataFrame([[datetime(2014,1,1),
                      datetime(2014,1,3)]],
                      columns=['date1','date2'])

# 
Data['range'] = Data.apply(lambda x:'%s - %s' %
                             (x['date1'].to_pydatetime().strftime("%d/%m/%Y"),
                              x['date2'].to_pydatetime().strftime("%d/%m/%y")),
                             axis=1)       

print(Data)      

Результат:

       date1      date2
0 2014-01-01 2014-01-03
       date1      date2                  range
0 2014-01-01 2014-01-03  01/01/2014 - 03/01/14
person Marcin    schedule 13.12.2014
comment
Это было хорошо, но другой ответ был немного более кратким. Спасибо вам за помощь! - person Chris; 13.12.2014