您可以使用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「... –