При изменении значений в одном столбце на основе условия в другом столбце возвращается ошибка - PullRequest
1 голос
/ 12 февраля 2020

Существует df

request_type start_date  end_date

main         2020-02-12  2020-02-12
main         2020-02-12  2020-02-12
main         2020-02-12  2020-02-12
meta         2020-02-10  2020-02-10
meta         2020-02-10  2020-02-10

Мне нужно добавить значения '00:00:00' в столбец start_date и end_date ', если request_type является основным

То, что я пробовал, это

df['start_date'] = np.where(df.request_type == 'main', df.start_date + ' 00:00:00', df.start_date)

Я получил эту ошибку

TypeError: unsupported operand type(s) for +: 'datetime.date' and 'str'

Хорошо, тогда

df['start_date'] = np.where(df.request_type == 'main', df.start_date.dt.strftime('%Y-%m-%d') + ' 00:00:00', df.start_date)

Затем я получил эту ошибку

AttributeError: Can only use .dt accessor with datetimelike values

Затем я проверил тип столбца start_date и это объект

Я не могу найти, где находится ошибка и как ее устранить

Ценю любую помощь

Мой идеальный результат -

request_type start_date           end_date

main         2020-02-12 00:00:00  2020-02-12 00:00:00
main         2020-02-12 00:00:00  2020-02-12 00:00:00
main         2020-02-12 00:00:00  2020-02-12 00:00:00
meta         2020-02-10           2020-02-10
meta         2020-02-10           2020-02-10

1 Ответ

2 голосов
/ 12 февраля 2020

Возможно, но получить смешанные значения - строки с 00:00:00 и python датируют объекты в одном столбце, поэтому следующая обработка должна быть проблематичной c:

df['start_date'] = np.where(df.request_type == 'main', 
                            pd.to_datetime(df.start_date).dt.strftime('%Y-%m-%d 00:00:00'),
                            df.start_date)

Или:

df['start_date'] = np.where(df.request_type == 'main', 
                            df.start_date.astype(str) +' 00:00:00',
                            df.start_date)

print (df)
  request_type           start_date    end_date
0         main  2020-02-12 00:00:00  2020-02-12
1         main  2020-02-12 00:00:00  2020-02-12
2         main  2020-02-12 00:00:00  2020-02-12
3         meta           2020-02-10  2020-02-10
4         meta           2020-02-10  2020-02-10

print (df['start_date'].apply(type))
0              <class 'str'>
1              <class 'str'>
2              <class 'str'>
3    <class 'datetime.date'>
4    <class 'datetime.date'>
Name: start_date, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...