转换包含缺失值的日期字符串

2 投票
1 回答
2049 浏览
提问于 2025-04-18 03:22

这个问题可以更广泛地提出来,但我遇到的具体问题是这样的:我想把一串日期的字符串转换成日期时间对象,但这个字符串里有空的日期。例如:

df = pd.DataFrame({'A': ['2000.02.25', ''], 'B': ['', '2003.05.26']})

我希望返回的数据框能把空的日期保留为 NaNNaT。为了提高速度,我不想使用 pd.to_datetime,虽然它的功能很好,但速度比 datetime.datetime 慢很多:

df['A'] = [datetime.datetime.strptime(x, '%Y.%m.%d') for x in df['A']]

不过,问题在于如何处理这些空字符串。如果我加上一个 if len(x) > 0 的条件,返回的列表长度就会不一样。

1 个回答

2
df['A'] = [datetime.datetime.strptime(x, '%Y.%m.%d') if x else pd.NaT for x in df['A']]

这个写法 a if cond else b 可以在列表推导式之外使用,它是Python中的三元运算符。

我也有点惊讶 df = df.astype(pd.datetime) 这个方法没有更好,但我猜可能是因为它在每一行空值上都会出错。这种性能问题可能值得关注。

撰写回答