熊猫报告系列是小数时的对象
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
,因为即使类型很可能是数值,算术运算也不太可能被矢量化。
当您存储 str
或 datetime.date
值时会观察到相同的情况,这些的 dtype 是 object
。
【讨论】:
谢谢,这是有道理的。如果我输入 pandas 列,是否有任何函数会返回小数/浮点数? 对不起,我不明白如果 dtype 是 float64 则返回 float64,如果是十进制则返回对象。返回小数/float64 是什么意思?你是指元数据还是价值? 我想要一个函数,如果它是小数,它会返回表明它是数字的东西。我有一个超过 200 列的 df,我需要确定每列的类型。由于 dtype 函数还为字符串列返回“对象”,因此我无法区分字符串列和小数列。 所以问题是如果float64
可以满足您的要求,为什么还要使用Decimal
?这些数据来自哪里?您如何首先添加带小数的列,您的问题在这里缺乏上下文。就个人而言,如果您不需要小数并且无法修改数据的插入方式,请在小数列上调用 pd.to_numeric
数据来自 API。我可以修改十进制的列,但是当熊猫告诉我它们都是“对象”时,我怎么知道哪些是十进制的,哪些是字符串?我可以检查该系列的前几个元素,但我希望有一种不那么老套的方式:)以上是关于熊猫报告系列是小数时的对象的主要内容,如果未能解决你的问题,请参考以下文章