2015-01-27 2 views
-3

У меня есть столбец «DATEDIF» в моем dataframe как:конвертировать разницу дней в числовые значения в питона панд

exposuredate min_exposure_date datedif 
    2014-10-08 2014-09-27   11 days 
    2014-10-09 2014-09-27   12 days 
    2014-09-27 2014-09-27   0 days 
    2014-09-27 2014-09-27   0 days 
    2014-10-22 2014-09-27   25 days 

    data.exposuredate = pd.to_datetime(data.exposuredate) 
    data.min_exposure_date = pd.to_datetime(data.min_exposure_date) 

    data['datedif'] = ((data.exposuredate)-(data.min_exposure_date)) 

Формат колонок datetime64 [нс]. Я хочу извлечь количество дней в поле «датифик». Я не могу найти ничего, что могло бы помочь мне извлечь разницу с точки зрения количества дней.

Я пробовал: данные [ 'datedif_day'] = данные [ 'DATEDIF'] dt.days

Ошибка:. AttributeError: объект серии 'не имеет атрибута 'дт'

+0

Это хорошо. Удачи с этим. У вас возникли вопросы? –

+0

цитируя mysel снова: «Я хочу извлечь количество дней в поле« датифик ». Это означает, сколько дней в этой дате «датифик»? –

+0

Итак, что вы пробовали, и в чем проблема с вашим текущим кодом? Это ** не ** - служба написания кода. – jonrsharpe

ответ

3

В «DATEDIF 'выглядит в формате дней, но на самом деле это за секунды. Таким образом, чтобы получить количество дней для дальнейшего использования, добавьте в код следующую строку: данные ['датифик]] = данные [' датфик] '. Astype (np.numpy64) данные [' датированные_для '] = (данные [ «DATEDIF»]/86400000000000)

0

панд Документы относятся к типам преобразований, которые вы ищете, как Frequency Conversion

два варианта 1) деление на Timedelta или 2) преобразование типов. Существует тонкая разница между ними, как указано в документах:

«Обратите внимание, что деление на числовой скаляр является истинным делением, в то время как астипирование эквивалентно делению пола».

data = pd.DataFrame([("2014-10-08", "2014-09-27"), 
        ("2014-10-09", "2014-09-27"), 
        ("2014-09-27", "2014-09-27"), 
        ("2014-10-22", "2014-09-27")], 
        columns=["exposuredate", "min_exposure_date"]) 

data['datediff'] = pd.to_datetime(data.exposuredate) 
        - pd.to_datetime(data.min_exposure_date) 

data['datediff']/pd.Timedelta(1, unit='d') 
data['datediff'].astype('timedelta64[D]') 

Оба операций дают:

0 11.0 
1 12.0 
2  0.0 
3 25.0 
Name: datediff, dtype: float64 

Если вы используете разницу дат в качестве признака для обучения алгоритма машинного обучения, это не имеет значения, в какой форме они представлены, как они должны все равно. timedelta64[ns] отлично подходит для этого. Когда дело доходит до целей визуализации, см. this post.

Смежные вопросы