您可以使用astype
,然后apply
to_datetime
使用df str
与格式字符串转换:
In [190]:
df.astype(str).apply(lambda x: pd.to_datetime(x, format='%Y%m%d'))
Out[190]:
col1 col2
0 2004-09-29 NaT
1 NaT 2004-09-25
编辑
使用strptime
会慢一些,并不太友好,首先转换成str
介绍.0
由于dtype是浮动的,我们必须对此进行拆分,另外strptime
不会忽略和Series
,所以我们必须拨打applymap
。在此NaN
顶部会导致strptime
到博克所以我们必须做到以下几点:如果我们比较在2K行DF 2种方法
In [203]:
def func(x):
try:
return dt.datetime.strptime(x.split('.')[0], '%Y%m%d')
except:
return pd.NaT
df.astype(str).applymap(func)
Out[203]:
col1 col2
0 2004-09-29 NaT
1 NaT 2004-09-25
时序
:
In [212]:
%timeit df.astype(str).apply(lambda x: pd.to_datetime(x, format='%Y%m%d'))
100 loops, best of 3: 8.11 ms per loop
In [213]:
%%timeit
def func(x):
try:
return dt.datetime.strptime(x.split('.')[0], '%Y%m%d')
except:
return pd.NaT
df.astype(str).applymap(func)
10 loops, best of 3: 86.3 ms per loop
我们观察到pandas
方法速度提高了10倍以上,它可能会随着向量化而变好得多
您需要使用'str()'将'float'转换为'string',然后再将它传递给'datetime.strptime()' – gtlambert
yes我试过了,但是当我将它们转换为str时,它将日期转换为“ 20040929.0“... –