当不是每个值都可以转换时,如何将Pandas系列转换为时间戳



上下文

我有一个PandasSeries,其中包含Dates,格式为String(例如2017-12-19 09:35:00)。我的目标是将这个Series转换为Timestamps(自1970年以来以秒为单位的时间)

困难在于,该Series中的一些Values已损坏,无法转换为Timestamp。在这种情况下,应该将它们转换为None


代码

import datetime
series = series.apply(lambda x: datetime.datetime.strptime(x, "%Y-%m-%d %H:%M:%S").timestamp())

问题

当所有Values的格式都正确,但存在损坏的数据时,上面的代码就会工作。

  • 如何在将所有不可转换的数据转换为None的同时实现目标

Pandas通常表示具有NaT(非时间)的无效时间戳。您可以将pd.to_datetimeerrors="coerce":一起使用

import pandas as pd
series = pd.Series(["2023-01-07 12:34:56", "error"])
out = pd.to_datetime(series, format="%Y-%m-%d %H:%M:%S", errors="coerce")

输出:

0   2023-01-07 12:34:56
1                   NaT
dtype: datetime64[ns]

使用try-except创建一个函数,如下所示:

def to_timestamp(x):
try:
return datetime.datetime.strptime(x, "%Y-%m-%d %H:%M:%S").timestamp()
except:
return None
series = series.apply(to_timestamp)

相关内容

  • 没有找到相关文章

最新更新