这可能被公式化为一个更一般的问题,但我遇到的问题是这样的:我想将一个日期字符串转换为datetime对象,但该字符串包含空日期。例如:
df = pd.DataFrame({'A': ['2000.02.25', ''], 'B': ['', '2003.05.26']})
我希望返回的数据帧将空日期保留为NaN
或NaT
。为了速度起见,我不想使用pd.to_datetime
,它在其他方面工作得很好,但与datetime.datetime
:相比慢了一个数量级
df['A'] = [datetime.datetime.strptime(x, '%Y.%m.%d') for x in df['A']]
然而,问题是如何处理空字符串。如果我包含if len(x) > 0
条件,则返回的列表将具有不同的长度。
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)
没有获胜,但我的猜测是,它在每一个空行都会出现异常。此性能命中可能值得bug使用。