python - 如何使用 strptime 将浮点/整数转换为日期?

标签 python datetime pandas

我有一个 pandas 数据框,其中包含以下列:

col1 col2
20040929 NaN
NaN 20040925 

即 col1 和 col2 都是 float64(或 int64)数字。 我尝试使用 datetime.strptime() 转换它们,但收到错误

"cannot convert the series to type 'float'"

如果我将它们转换为 float ,我会得到类似 20040929.0 的内容,strptime 无法理解。

如何将这些列转换为日期? 非常感谢

最佳答案

您可以使用 astype 将 df 转换为 str然后apply to_datetime带格式字符串:

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是float,我们必须拆分对此,另外 strptime 不理解 Series,因此我们必须调用 applymap。除此之外,NaN 将导致 strptime 停止运行,因此我们必须执行以下操作:

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 倍以上,而且由于它是矢量化的,它的扩展性可能会更好

关于python - 如何使用 strptime 将浮点/整数转换为日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767817/

相关文章:

Javascript 没有正确解析日期

java - 在 Java 中生成两个日期之间的日开始时间和日结束时间。夏令时问题

javascript - 如何获取两个 Date.now() 之间的时差(以小时为单位)?

python - 将 Pandas 索引中的分组数组元素转换为 Python 中的单个数组元素

python - 如何将多个 csv 合并到一个数据框中

python - 从集合字典中获取一组值

python - 在 PyCharm 中调试 Flask

python - 是否有任何 Python3 兼容模块来读取/写入 IPTC 数据?

python - Pandas 中的序列相似度匹配

python - 在 numpy 数组中查找平均值最高的行