Pandas中.dt访问器失效,但Python原生datetime函数可正常工作
问题成因分析
- 核心原因是你的
Date列并非Pandas标准的datetime64[ns]类型,而是object类型(即便列中多数元素是Python原生datetime对象)。 - Pandas的
.dt访问器仅对datetime64类型的Series提供支持,当列是object类型时,.dt无法正确识别并解析所有元素,就会出现某一位置后失效的情况。 - 而
apply(fn)是逐元素调用Python原生datetime的month属性,只要每个元素是有效的datetime对象,就能正常返回结果,不受列整体类型的影响。
验证与解决方法
- 先检查列类型:
print(df_final['Date'].dtype)
如果输出是object,就确认了类型问题。
- 转换为标准datetime类型:
df_final['Date'] = pd.to_datetime(df_final['Date'])
转换后再使用.dt访问器即可正常工作:
df_final['Year'] = df_final['Date'].dt.to_period('Y') df_final['Month'] = df_final['Date'].dt.month
内容的提问来源于stack exchange,提问作者Jamie Marshall
相关产品推荐
相关产品推荐

