pandas to_datetime не смог разобрать строку в даты и вернуть строки - PullRequest
0 голосов
/ 31 октября 2018

У меня есть Series s как

10241715000
  201709060
   11202017
     112017
     111617
     102417
     110217
    1122018

Я попробовал следующий код для преобразования s в datetime;

pd.to_datetime(s.str[:7], format='%-m%d%Y', errors='coerce')

но он вернул s, так как без каких-либо преобразований я ожидал что-то вроде

NaT
NaT
2017-01-20
NaT
NaT
NaT
NaT
2018-01-12

format определяется в соответствии с директивами strftime, которые %-m указывают месяц как десятичное число, например 1; %Y обозначает год как десятичное число, например 2018. Мне интересно, в чем здесь проблема. Я использую Pandas 0.22.0 и Python 3.5.

UPDATE

data = np.array(['10241715000','201709060','11202017','112017','111617','102417',
 '110217','1122018'])

s = pd.Series(data)

pd.to_datetime(s.str[-7:], format='%-m%d%Y', errors='coerce')

0    1715000
1    1709060
2    1202017
3     112017
4     111617
5     102417
6     110217
7    1122018
dtype: object

1 Ответ

0 голосов
/ 31 октября 2018

Должно быть -7, а не 7 для str среза

pd.to_datetime(s.astype(str).str[-7:], format='%m%d%Y', errors='coerce')
Out[189]: 
0          NaT
1          NaT
2   2017-01-20
3   2017-01-01
4          NaT
5          NaT
6          NaT
7   2018-11-02
Name: a, dtype: datetime64[ns]

Обновление

pd.to_datetime(s.str[-7:].str.pad(8,'left','0'), format='%m%d%Y', errors='coerce')
Out[208]: 
0          NaT
1          NaT
2   2017-01-20
3          NaT
4          NaT
5          NaT
6          NaT
7   2018-01-12
dtype: datetime64[ns]
...