Python 如何使用strtime将浮点/整数转换为日期?
我有一个包含以下列的数据框:Python 如何使用strtime将浮点/整数转换为日期?,python,datetime,pandas,Python,Datetime,Pandas,我有一个包含以下列的数据框: col1 col2 20040929 NaN NaN 20040925 也就是说,col1和col2都是浮点数64(或int64)。 我正试图使用datetime.strTime()转换这些,但我得到了错误 “无法将序列转换为“float”类型” 如果我把它们转换成float,我会得到类似于20040929.0的东西,这是strtime不理解的 那么如何将这些列转换为日期? 非常感谢您可以使用格式字符串将df转换为str: In [190]: df.astype
col1 col2
20040929 NaN
NaN 20040925
也就是说,col1和col2都是浮点数64(或int64)。
我正试图使用datetime.strTime()转换这些,但我得到了错误
“无法将序列转换为“float”类型”
如果我把它们转换成float,我会得到类似于20040929.0的东西,这是strtime不理解的
那么如何将这些列转换为日期?
非常感谢您可以使用格式字符串将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
编辑
使用strtime
会更慢、更不友好,首先转换为str
会引入.0
,因为数据类型是浮动的,所以我们必须在这一点上进行拆分,另外strtime
不理解系列
,所以我们必须调用applymap
。除此之外,NaN
将导致strtime
停止,因此我们必须执行以下操作:
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
计时
如果我们在2K行df上比较这两种方法:
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
转换为字符串
,然后再将其传递到datetime.strtime()
是的,我尝试过,但当我将它们转换为str时,它会将日期转换为“20040929.0”…是的,但速度会慢一些,因为您必须对每个元素进行操作,这里我们在每个列上使用to_datetime
作为向量化方法,该列中的所有值在转换时都会转换,而不是一次转换一个元素。另外,当我们转换浮点时(它们是浮动的,因为存在NaN
)您将.0
引入需要转换为int的值,作为预处理/后处理步骤。strtime
也不能将NaN
作为float或str形式处理,因此当您将应用于_datetime
字符串NaN
转换为pandasNaN时,只需进行一次澄清即可
right?@6thsense从技术上讲是NaT
,它是datetime的一个特殊NaN
值,用于指示无效值