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
(pandasDataFrame
)那样工作。给定一个PandasDataFrame
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,但这是另一个会影响性能的步骤。感谢您的解释!