上下文
我有一个Pandas
Series
,其中包含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_datetime
与errors="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)