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
转换为pandas
NaN时,只需进行一次澄清即可
right?@6thsense从技术上讲是
NaT
,它是datetime的一个特殊
NaN
值,用于指示无效值