Python 定义df.to_sparse()结果的数据类型

Python 定义df.to_sparse()结果的数据类型,python,pandas,Python,Pandas,我有一个数据帧df,它是稀疏的,为了提高内存效率,我希望使用将其转换为\u sparse() 然而,新的表示似乎以dtype=float64结束,即使我的df是dtype=int8 简而言之,使用to_sparse()?时,是否有方法指定数据类型/防止自动转换为dtype=float64。不 您知道,数据类型不是受控实体d类型通常是一个不重要的东西。 数据类型在任何方面都是不可控制的,它们由numpy自动断言,并且只能在更改数据帧或numpy数组中的数据时更改 这就是说,以浮点而不是int作为数

我有一个数据帧
df
,它是稀疏的,为了提高内存效率,我希望使用
将其转换为\u sparse()

然而,新的表示似乎以
dtype=float64
结束,即使我的
df
dtype=int8

简而言之,使用
to_sparse()

时,是否有方法指定数据类型/防止自动转换为
dtype=float64
。不 您知道,数据类型不是受控实体d类型通常是一个不重要的东西。 数据类型在任何方面都是不可控制的,它们由numpy自动断言,并且只能在更改数据帧或numpy数组中的数据时更改

这就是说,以浮点而不是int作为数据类型结束的典型原因是在series或numpy数组中引入了NaN值。有人说这是一只熊猫抓住了你。我个人认为这是因为熊猫和努比之间的(太)紧密耦合

一般来说,数据类型在任何事情上都不应该被信任,因为它们非常不可靠。我认为,如果每个与numpy/熊猫一起工作的人都不接触数据类型,他们的生活会更好


如果你真的讨厌浮动,据我所知,你唯一的选择就是使用字符串表示,这当然在大多数情况下会导致更多的问题。

从引擎盖下面看,
Pandas
稀疏帧实现在
Pandas.sparse.frame
我们看到
astype()
方法仍在等待从0.18.0版开始实施

当我们有一些适当的实现时,
dtype
的转换应该像
pandas.core.frame
(pandas
DataFrame
)那样工作。给定一个Pandas
DataFrame
df
我们可以将其转换为
sparsaframe
并指定
dtype

df.to_sparse().astype(dtype)

ATM,
sparaFrame
dtype
没有太多支持,但目前正在开发中。请参阅我打开的这一期。

谢谢您精彩的解释。我想知道:“如果我使用
df.fillna(0),“使用float而不是int作为数据类型结束的典型原因是在序列或numpy数组中引入了NaN值”。为了避免以NaN值结束,我使用了
df.fillna(0)。然而,这并不能解决问题。我是否错过了阅读您的解释中的字里行间内容?numpy不会自动将dtype浮点更改为dtype int,因为其中没有NaN值。显然,在.to_sparse()转换中的某个点上存在NaN值。您可以尝试添加一个
.astype(int)
,最后,它会将数据类型更改为int,但这是另一个会影响性能的步骤。感谢您的解释!