转换缺少值的日期字符串

时间:2014-04-19 07:29:04

标签: python datetime

这可能会形成一个更普遍的问题,但我遇到的问题是这样的:我想将一串日期转换为datetime对象,但该字符串包含空日期。例如:

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 个答案:

答案 0 :(得分: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)没有胜出,但我的猜测是它在每一个空行上都会遇到异常。这种性能打击可能是有价值的。