Конвертируйте несколько столбцов в Python фрейме данных в гггг / мм / дд с числовыми значениями Excel и обычными значениями даты и времени - PullRequest
1 голос
/ 04 марта 2020

Мне нужно иметь возможность выбрать пару столбцов из файла Excel в кадре данных, чтобы применить стандартный формат даты и времени (гггг / мм / дд). Данные (к сожалению) представлены в смеси числового формата Excel (например, 43799) и стандартного формата даты (например, 30.11.2009). Я использую метод read_excel из pandas и предпочитаю не использовать альтернативные методы открытия файла (например, открытая рабочая книга xldr).

Пример того, как будут выглядеть данные при импорте it:

import xlrd
import pandas as pd
import numpy as np
from datetime import datetime as dt

data=[['test', 43799, '11/30/2019', '11/30/2019'], ['test 2', '11/30/2019', '11/30/2019', '11/30/2019'], ['test 3', 43799, '11/30/2019', 43799]]
df=pd.DataFrame(data, columns=['Name','Date_1', 'Date_2', 'Date_3'])
print(df)

Итак, как указано во введении, как выбрать столбцы 1-3 (Date_1, Date_2, Date_3) и применить один и тот же формат даты ко всем из них (YYYY-MM-DD) ? Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 04 марта 2020

Вам нужно будет проанализировать столбец несколько раз с различными форматами. combine_first позволит вам выбрать правильную дату. Дата в Excel - дни с 1900-01-01, поэтому сначала нужно изменить это значение на целое.

for col in ['Date_1', 'Date_2', 'Date_3']:
    d1 = pd.to_datetime(df[col], format='%m/%d/%Y', errors='coerce')
    d2 = pd.to_datetime(pd.to_numeric(df[col], errors='coerce'),  unit='d', origin='1900-01-01')
    df[col] = d1.combine_first(d2)

     Name     Date_1     Date_2     Date_3
0    test 2019-12-02 2019-11-30 2019-11-30
1  test 2 2019-11-30 2019-11-30 2019-11-30
2  test 3 2019-12-02 2019-11-30 2019-12-02
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...