求助:将Pandas datetime转换为稀疏datetime失败问题
解决pandas 1.3.5中Datetime列转稀疏类型的断言错误问题
问题原因
在pandas 1.3.5版本中,使用pd.SparseDtype转换datetime列时,若仅指定'datetime64'而未明确精度(如[ns]),或未正确设置填充值pd.NaT,会触发内部时区检查的断言错误:assert values.tx is None and aware。
解决方案
需要明确指定datetime类型的精度,并将填充值设为pd.NaT(datetime类型的缺失值标识),具体代码如下:
import pandas as pd # 构造密集datetime数据 dense = pd.DataFrame({"A": pd.to_datetime(['2021-01-01', pd.NaT, pd.NaT])}) # 正确定义稀疏datetime类型:指定精度+填充值为NaT dtype = pd.SparseDtype('datetime64[ns]', fill_value=pd.NaT) # 转换为稀疏类型 sparse = dense.astype(dtype) print(sparse.dtypes)
执行后输出:
A Sparse[datetime64[ns], NaT] dtype: object
注意事项
- 若处理带时区的datetime(aware类型),需在类型中明确时区,例如:
dtype = pd.SparseDtype('datetime64[ns, UTC]', fill_value=pd.NaT) - 必须指定完整的datetime类型(包含精度),不能仅写
'datetime64',否则会触发类型识别错误。
内容的提问来源于stack exchange,提问作者David Johnson
相关产品推荐
相关产品推荐

