将熊猫日期时间转换为稀疏日期时间失败

问题描述 投票:0回答:2

我正在尝试将 pd.DataFrame 中的多个列从密集型转换为稀疏型。以下 MRE(密集整数到稀疏整数)有效:

>>> dense = pd.DataFrame({"A": [1, 0, 0, 1]})
>>> dtype = pd.SparseDtype(int, fill_value=0)
>>> sparse = dense.astype(dtype)
>>> print(sparse.dtypes)

A    Sparse[int32, 0]
dtype: object

但是,将此逻辑扩展到稀疏日期时间数据失败:

>>> dense = pd.DataFrame({"A": pd.to_datetime(['2021-01-01', pd.NaT, pd.NaT])})
>>> dtype = pd.SparseDtype('datetime64')
>>> sparse = dense.astype(dtype)
>>> print(sparse.dtypes)

返回断言错误“assert values.tx is None and aware”

我正在使用 pandas 1.3.5.

python pandas sparse-matrix
2个回答
0
投票

此代码创建一个带有日期时间值的 pandas DataFrame,然后使用 SparseDtype 对象将其转换为稀疏 pandas DataFrame。生成的稀疏 DataFrame 包含相同的日期时间值,缺失值表示为 nan。

import pandas as pd

dense = pd.DataFrame({"A": pd.to_datetime(['2021-01-01', pd.NaT, pd.NaT])})
dtype = pd.SparseDtype('datetime64[ns]')
sparse = dense.astype(dtype)
print(sparse.dtypes)

0
投票

我开始升级

pandas

pip install --upgrade pandas

然后您需要为 SparseDtype 提供一个

fill_value
,因为默认情况下,SparseDtype 的
fill_value
设置为
None
,这不是
datetime64
数据的有效填充值。

import pandas as pd

dense = pd.DataFrame({"A": pd.to_datetime(['2021-01-01', pd.NaT, pd.NaT])})
dtype = pd.SparseDtype('datetime64[ns]', fill_value=pd.NaT)
sparse = dense.astype(dtype)
print(sparse.dtypes)

这对我有用!

© www.soinside.com 2019 - 2024. All rights reserved.