Pandas 是否有人找到了错误数据类型推断的解决方案?

Pandas 是否有人找到了错误数据类型推断的解决方案?,pandas,apache-spark,Pandas,Apache Spark,我尝试使用Pandas进行POC(概念验证项目),因为我认为更多的队友更容易采用它(通常我使用Scala Spark进行ETL)。Pandas变异了我大约一半的数据类型(例如,通过向整数中添加完全不必要的小数,以及其他无意义的更改,如浮点上有太多额外的小数,当我将其包含在POC管道中时,这会导致各种下游问题。例如,“1”无缘无故变为“1.0”;这实际上会将整数变为浮点(那是变异!不好…)。在一个非常窄的数据集上,这可能很好,但在一个宽的数据集上,这会成为一个严重的问题,每次我在读CSV文件时,我

我尝试使用Pandas进行POC(概念验证项目),因为我认为更多的队友更容易采用它(通常我使用Scala Spark进行ETL)。Pandas变异了我大约一半的数据类型(例如,通过向整数中添加完全不必要的小数,以及其他无意义的更改,如浮点上有太多额外的小数,当我将其包含在POC管道中时,这会导致各种下游问题。例如,“1”无缘无故变为“1.0”;这实际上会将整数变为浮点(那是变异!不好…)。在一个非常窄的数据集上,这可能很好,但在一个宽的数据集上,这会成为一个严重的问题,每次我在读CSV文件时,我都要特别地强制转换这么多列类型。我在争论我是否应该跳过对熊猫的研究&直接转到Spark,或者是否有一个简单的解决方案(我从未在spark上遇到过这种问题)。我还想知道考拉是否能解决这些问题(因为它是spark上的熊猫,也许它会使用spark的数据推断而不是熊猫的数据推断)。

您遇到的问题可能与存在NaN将整数列改为浮点列有关(请参阅)。虽然取得了一些进展,但仍处于试验阶段。

您遇到的问题可能与存在NaN将整数列改为浮点列有关(请参阅)有一些进展,但仍然是实验性的。

非常有趣,为了保持良好和一致的ETL过程,您不想在第一个实例中声明您的数据/元类型吗?如果稍后数据中出现异常值,会发生什么情况?(这不是ETL中t的要点吗(:)浮点上多余的小数太多了?就像你想要浮点32s,默认值是浮点64s?Pandas有一个问题,如果你将一个数据类型转换为字符串,它将不起作用,因此我不得不将所有内容转换为Object,以防修改。然而,尽管做了这些努力,当你有很多列时,这是不实际的&最终会出现问题。O一个新的解决方案可能是将Pandas&force cast一切都扩展到object——不过我不知道这会带来什么计算复杂性。非常有趣的是,为了保持良好和一致的ETL过程,您不想在第一个实例中声明您的数据/元类型吗?如果出现异常值会发生什么到以后的数据中?(这不是ETL(:)中的t点吗浮点上多余的小数太多了?就像你想要浮点32s,默认值是浮点64s?Pandas有一个问题,如果你将一个数据类型转换为字符串,它将不起作用,因此我不得不将所有内容转换为Object,以防修改。然而,尽管做了这些努力,当你有很多列时,这是不实际的&最终会出现问题。O一个解决方案可能是将Pandas&force将所有内容都转换为object——但我不知道这会带来什么计算复杂性。是的,这是问题的一部分。如果整数曾经丢失,(如果存在NaNs)Pandas会将所有整数解释为浮点数,即使没有一个浮点数。@JasonF因为NaN被认为是浮点数,任何带有NaN的整数列都会被污染。出于计算目的,这应该不是问题。如果您关心表示,请确保在导出时格式化数字。如果您确实是一个不受此功能的影响,请尝试将该列转换为实验性的“Int8/32/64”,并使用大写字母“I”,这将允许integer和NaNYes共存,这是问题的一部分。如果integer丢失,(如果存在Nan)Pandas会将所有整数解释为浮点数,即使没有一个浮点数。@JasonF因为NaN被认为是浮点数,任何带有NaN的整数列都会被污染。出于计算目的,这应该不是问题。如果您关心表示,请确保在导出时格式化数字。如果您确实是一个如果不受此功能的影响,请尝试将列强制转换为实验性的“Int8/32/64”,并使用大写字母“I”,它将允许整数和NaN共存