我有一个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.0
和Python 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
答案 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]