Context
I have a Pandas Series containing Dates in a String format (e.g. 2017-12-19 09:35:00). My goal is to convert this Series into Timestamps (Time in Seconds since 1970).
The difficulty is, that some Values in this Series are corrupt and cannot be converted to a Timestamp. In that case, they should be converted to None.
Code
import datetime
series = series.apply(lambda x: datetime.datetime.strptime(x, "%Y-%m-%d %H:%M:%S").timestamp())
Question
The code above would work when all
Valuesare in the correct format, however there is corrupt data.
- How can I achieve my goal while converting all not-convertible data to
None?
CodePudding user response:
Create a function with try except, like this:
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)
CodePudding user response:
Pandas typically represents invalid timestamps with NaT (Not a Time). You can use pd.to_datetime with 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")
output:
0 2023-01-07 12:34:56
1 NaT
dtype: datetime64[ns]
