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

bcs8qyzn  于 2023-01-11  发布在  其他
关注(0)|答案(2)|浏览(111)
    • 背景**

我有一个PandasSeries,其中包含StringDates(例如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的同时实现目标?
2lpgd968

2lpgd9681#

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]
8qgya5xd

8qgya5xd2#

使用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)

相关问题