熊猫to_datetime无法将字符串解析为日期并返回字符串

时间:2018-10-31 14:43:35

标签: python-3.x pandas strftime string-to-datetime

我有一个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将Month表示为十进制数字,例如1; %Y表示年份为十进制数字,例如2018。我想知道这里是什么问题。我正在使用Pandas 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

1 个答案:

答案 0 :(得分: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]