You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas数据框中的Arrow对象转换为datetime64[ns]类型

解决Pandas中Arrow日期类型转datetime64[ns]的问题

问题原因

你之前的方法无效,是因为单个修改DataFrame元素不会改变列的整体数据类型。原列存储Arrow对象时 dtype 为object,即使把某一个元素换成Python datetime对象,列的 dtype 依然保持object,必须显式转换整列才能切换到datetime64[ns]。

可行解决方案

方案1:创建DataFrame时直接转换

在构建DataFrame前就把Arrow对象转为Python datetime,这样Pandas会自动识别为datetime64[ns]类型:

import arrow
import pandas as pd

test = arrow.utcnow()
df = pd.DataFrame({"test": [test.datetime]})  # 直接传入datetime对象
print(df.dtypes)  # 输出: test    datetime64[ns]

方案2:对已有DataFrame整列转换

如果已经有包含Arrow对象的DataFrame,用pd.to_datetime配合apply提取datetime属性,批量转换整列:

import arrow
import pandas as pd

test = arrow.utcnow()
df = pd.DataFrame({"test": [test]})

# 整列转换为datetime64[ns]
df['test'] = pd.to_datetime(df['test'].apply(lambda x: x.datetime))
print(df.dtypes)  # 输出: test    datetime64[ns]

方案3:利用Arrow的to_pydatetime方法(等效方案)

Arrow对象的to_pydatetime()方法和.datetime属性效果一致,也可以用来转换:

# 创建时转换
df = pd.DataFrame({"test": [test.to_pydatetime()]})

# 已有DataFrame整列转换
df['test'] = pd.to_datetime(df['test'].apply(lambda x: x.to_pydatetime()))

补充说明

虽然Arrow和Pandas早期兼容性确实有问题,但现在通过提取Python datetime对象再交给Pandas处理,就能完美适配datetime64[ns]类型,核心是要确保整列统一转换,而不是修改单个元素。

内容的提问来源于stack exchange,提问作者Daddedebad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:23:16