Создание нового столбца на основе значений другого столбца (условие на дату присутствует в нескольких столбцах) в Python - PullRequest
0 голосов
/ 19 ноября 2018

В наборе данных есть несколько столбцов с датой в качестве значения.Мне нужно создать новые столбцы на основе определенных условий на значения даты.Определенные значения даты заменяются символом "\ N", поэтому кажется, что весь столбец обрабатывается как строка.

Date 1      Date 2
2012-12-03  2012-12-07
2004-12-31  \N
\N          2010-10-20
2014-11-22  \N
2014-12-16  2014-12-31

df = read_csv('filepath')
df['Level'] = np.where(df['Date 1'] - df['Date 2'] > '60', 'Level 1','Level 2')

Это приводит к ошибке

TypeError:неподдерживаемые типы операндов для -: 'str' и 'str'

Также условие будет включать другой сценарий (синтаксис может быть неправильным)

np.where(df['Date 1'] == pd.datetime('YYYY-MM-DD') & df['Date 1'] == "\N", 'Level 1','Level 2')

ЛюбойНаправление в этом отношении будет полезным.

1 Ответ

0 голосов
/ 04 марта 2019

Столбец действительно обрабатывается как строка. Это происходит потому, что по умолчанию pandas не конвертирует значения в типы дат.

После df = read_csv(path) вы можете сделать:

df['Date 1'] = pd.to_datetime(df['Date 1'], errors='coerce')
df['Date 2'] = pd.to_datetime(df['Date 2'], errors='coerce')

errors='coerce' преобразует значения '\N' в NaT (не время), указывая, что эти даты отсутствуют.

Позже вы можете работать с этими столбцами. Я не знаю точно, каково ваше намерение, но, например, это вернет разницу в Date1 и Date2 в днях:

diff = (df['Date1'] - df['Date2']).days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...