1

我有Series s一个

10241715000
  201709060
   11202017
     112017
     111617
     102417
     110217
    1122018

我尝试将以下代码转换sdatetime;

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指令定义的,例如 1;将年份表示为十进制数,例如 2018。我想知道这里有什么问题。我正在使用和。%-m%YPandas 0.22.0Python 3.5

更新

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
4

1 回答 1

2

str切片应该是 -7 而不是 7

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]
于 2018-10-31T14:48:12.820 回答