熊猫报告系列是小数时的对象

Posted

技术标签:

【中文标题】熊猫报告系列是小数时的对象【英文标题】:Pandas reporting series to be an object when it's a decimal 【发布时间】:2017-12-31 15:29:07 【问题描述】:

我需要一种自动化可靠的方法来查找 pandas 数据框中每一列的数据类型。我一直在使用 .dtype() 但注意到它有一些意想不到的东西。

考虑这 10 行数据框:

df['a']
Out[6]: 
0    250.00
1    750.00
2      0.00
3      0.00
4      0.00
5      0.00
6      0.00
7      0.00
8      0.00
9      0.00
Name: a, dtype: object

type(df['a'][0])
Out[9]: decimal.Decimal

当每个条目都是小数时,为什么整个列的 dtype 都是“对象”?我真的需要它说十进制或浮点数或数字。任何帮助,将不胜感激!

【问题讨论】:

Decimal 不是原则 numpy dtype 所以它表示为object 但实际的单元格类型仍然是Decimal,这也是date 和@987654328 发生的情况@objects 例如,这是正确的行为。如果您不需要小数精度,则可以使用float64。这个docs.scipy.org/doc/numpy/reference/arrays.scalars.html 演示了dytpe 层次结构。偏爱受支持类型的原因是,将支持矢量化操作,但它们可能不适用于其他类型,即使它们很可能是数字的 【参考方案1】:

这不是错误,而是由于numpy dtype 表示:https://docs.scipy.org/doc/numpy/reference/arrays.scalars.html。

基本上,Decimal 不是原则内置类型,因此它的 dtype 最终为 object,即使每个单元格的实际类型仍然是 Decimal

建议尽可能使用内置的标量类型,在本例中为 float64,因为即使类型很可能是数值,算术运算也不太可能被矢量化。

当您存储 strdatetime.date 值时会观察到相同的情况,这些的 dtype 是 object

【讨论】:

谢谢,这是有道理的。如果我输入 pandas 列,是否有任何函数会返回小数/浮点数? 对不起,我不明白如果 dtype 是 float64 则返回 float64,如果是十进制则返回对象。返回小数/float64 是什么意思?你是指元数据还是价值? 我想要一个函数,如果它是小数,它会返回表明它是数字的东西。我有一个超过 200 列的 df,我需要确定每列的类型。由于 dtype 函数还为字符串列返回“对象”,因此我无法区分字符串列和小数列。 所以问题是如果float64 可以满足您的要求,为什么还要使用Decimal?这些数据来自哪里?您如何首先添加带小数的列,您的问题在这里缺乏上下文。就个人而言,如果您不需要小数并且无法修改数据的插入方式,请在小数列上调用 pd.to_numeric 数据来自 API。我可以修改十进制的列,但是当熊猫告诉我它们都是“对象”时,我怎么知道哪些是十进制的,哪些是字符串?我可以检查该系列的前几个元素,但我希望有一种不那么老套的方式:)

以上是关于熊猫报告系列是小数时的对象的主要内容,如果未能解决你的问题,请参考以下文章

如何检索熊猫系列对象中第 n 个元素的值?

将具有相同索引的熊猫系列列表转换为字典

如何获得熊猫系列的元素逻辑非?

如何获得熊猫系列的元素逻辑非?

是否可以将熊猫系列附加到列表中

基于索引从大熊猫系列列表中提取到另一个大熊猫系列