Панды - ошибка «данные времени не соответствуют формату», когда строка соответствует формату? - PullRequest
0 голосов
/ 01 ноября 2018

Я получаю сообщение об ошибке, в котором говорится, что мои данные не соответствуют формату. Не уверен, что это ошибка или я что-то здесь упускаю. Я имею в виду эту документацию для формата строки. Странная часть в том, что если я записываю Dataframe 'data' в csv и читаю его, затем вызываю функцию, расположенную ниже, она преобразует дату, поэтому я не уверен, почему она не работает без записи в csv.

Есть идеи?

data['Date'] = pd.to_datetime(data['Date'], format='%d-%b-%Y')  

Я получаю две ошибки

 TypeError: Unrecognized value type: <class 'str'>  

 ValueError: time data '27‑Aug‑2018' does not match format '%d-%b-%Y' (match) 

Пример даты -

2‑Jul‑2018     
27‑Aug‑2018    
28‑May‑2018    
19‑Jun‑2017    
5‑Mar‑2018     
15‑Jan‑2018    
11‑Nov‑2013    
23‑Nov‑2015    
23‑Jun‑2014    
18‑Jun‑2018    
30‑Apr‑2018    
14‑May‑2018    
16‑Apr‑2018    
26‑Feb‑2018    
19‑Mar‑2018    
29‑Jun‑2015   

Это потому, что все они не двузначные дни? Каково значение формата строки для дней с одной цифрой? Похоже, что это может быть причиной, но я не уверен, почему это будет ошибка на «27», хотя.

Конечное решение (это был Unicode, а не строка) -

data['Date'] = data['Date'].apply(unidecode.unidecode)  
data['Date'] = data['Date'].apply(lambda x: x.replace("-", "/"))    
data['Date'] = pd.to_datetime(data['Date'], format="%d/%b/%Y")

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

У вас есть специальный знак здесь это не -

df.iloc[0,0][2]
Out[287]: '‑'

Заменить на '-'

pd.to_datetime(df.iloc[:,0].str.replace('‑','-'),format='%d-%b-%Y')
Out[288]: 
0    2018-08-27
1    2018-05-28
2    2017-06-19
3    2018-03-05
4    2018-01-15
5    2013-11-11
6    2015-11-23
7    2014-06-23
8    2018-06-18
9    2018-04-30
10   2018-05-14
11   2018-04-16
12   2018-02-26
13   2018-03-19
14   2015-06-29
Name: 2‑Jul‑2018, dtype: datetime64[ns]
0 голосов
/ 01 ноября 2018

Кажется, есть проблема с вашими строками даты. Я повторил вашу проблему с вашими примерами данных, и если я удаляю дефисы и заменяю их вручную (для первых трех дат), то код работает

pd.to_datetime(df1['Date'] ,errors ='coerce')

выход:

0    2018-07-02
1    2018-08-27
2    2018-05-28
3           NaT
4           NaT
5           NaT
6           NaT
7           NaT
8           NaT
9           NaT
10          NaT
11          NaT
12          NaT
13          NaT
14          NaT
15          NaT

Итог: ваши дефисы выглядят как обычные, но на самом деле это что-то другое, просто очистите исходные данные, и вы готовы пойти

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