Объединение двух типов данных в один столбец - PullRequest
0 голосов
/ 05 августа 2020

Я читаю файл excel в Python, в котором есть столбец с датами, отформатированными как строка. В некоторых ячейках вместо дат указано da sh. В настоящее время я конвертирую тире в пробелы, а затем форматирую столбец в столбец datetime. Однако я бы хотел, чтобы в ячейках с тире вместо пустого было написано «ОТКРЫТЬ». Возможно ли это?

df_Fin['Trade Term Date'] = np.where(df_Fin['Modified Term Date'] == '-', '', 
                                     df_Fin['Modified Term Date'])

df_Fin['Trade Term Date'] = [time.date() for time in df_Fin['Trade Term Date']]

1 Ответ

0 голосов
/ 05 августа 2020

Вы не можете преобразовать OPEN в дату, но вы сопоставляете лямбда-функцию со списком:

    from datetime import datetime as d.strptime
    
    #This tranforms x into a date if x has not the value 'OPEN'
    date_format = "%d.%m.%Y" #Change this to your format. d = day, m = month, y = year
    transform = lambda x: d.strptime(x, date_format) if x != 'OPEN' else x

    #This applies the Function to the complete list
    df['Trade Term Date'] = list(map(transform, df['Trade Term Date']))

Я создал небольшой фрейм данных с такими значениями:

       Trade Term Date
0  2020-03-12 00:00:00
1  2020-03-12 00:00:00
2  2020-03-12 00:00:00
3  2020-03-12 00:00:00
4  2020-03-12 00:00:00
5                 OPEN
6  2020-03-12 00:00:00
7                 OPEN

В лямбда-выражении вы можете применить любую функцию, которая вам нужна.

Но небольшая проблема остается. Если вы преобразуете некоторые данные в дату, тип вашего столбца не будет датой, и поэтому данные не будут сохранены как дата. Это связано с процессом nump-memory, когда каждый элемент в столбце должен иметь один и тот же тип данных, а «OPEN» не может иметь тип date.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...