这可能会形成一个更普遍的问题,但我遇到的问题是这样的:我想将一串日期转换为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
条件,则返回的列表将具有不同的长度。
答案 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)
没有胜出,但我的猜测是它在每一个空行上都会遇到异常。这种性能打击可能是有价值的。