Как «точно» использовать .to_datetime для ряда строк дат? - PullRequest
3 голосов
/ 06 июля 2019

Я пытаюсь преобразовать ряд строк дат в даты. Но я обнаружил, что даже с параметром «точный», установленным в «Истина», когда в строке нет значения дня, .to_datetime добавляет значение по умолчанию 01.

PS: я пользуюсь пандами 0.24.2

data = np.array(['2014-10','2015-06/07','20-14-08','2a115-09'])

ser = pd.Series(data)

pd.to_datetime(ser, errors='coerce', format='%Y-%m-%d', exact=True)

#Result:
0   2014-10-01
1          NaT
2          NaT
3          NaT
dtype: datetime64[ns]

#Expected
0   NaT
1   NaT
2   NaT
3   NaT
dtype: datetime64[ns]

1 Ответ

1 голос
/ 07 июля 2019

Вы можете попытаться условно проверить, присутствует ли формат даты с str.match и np.where:

уведомление. Я добавил еще одну дату, чтобы продемонстрировать правильный результат

data = np.array(['2014-10','2015-06/07','20-14-08','2a115-09', '2018-09-20'])

m = pd.Series(data).str.match('\d{4}-\d{2}-\d{2}')
data_new = pd.Series(np.where(m, 
                              pd.to_datetime(data, format='%Y-%m-%d',errors='coerce'), 
                              np.datetime64('NaT')))
0          NaT
1          NaT
2          NaT
3          NaT
4   2018-09-20
dtype: datetime64[ns]
...