python Polars中的数字值可以默认为Float64而不是Int64吗?

8nuwlpux  于 2023-05-05  发布在  Python
关注(0)|答案(1)|浏览(280)

我试图将一些代码转换为Pandas的Polars来测试性能的提高。我遇到了麻烦与Polars导入一些电子表格,其中多列大多数是0的,除了少数情况。由于0的数量,Polars会自动将它们视为Int64,我想避免用infer_schema_length = None解析整个数据集。
将每一列都设置为Float64也是非常耗时的,我宁愿避免它,所以如果我能让Polars只使用Float64而不是Int64,那将非常有帮助。

h43kikqp

h43kikqp1#

你把infer_schema_length弄反了。将其设置为None不会使其解析整个文件。如果将其设置为None,则它将使用默认值100。See here
我不认为有一种方法可以告诉polars放弃int而选择Floats。
作为一种变通方法,您可以加载该文件的一个小子集,然后使用它创建一个dtypes列表,用Floats替换Int

df=pl.read_csv(filepath, n_rows=5, n_threads=1, sample_size=5)
df=pl.read_csv(filepath, dtypes=[x if not "Int" in str(x) else pl.Float64() for x in df.dtypes])

注意:在我看来,不应该指定sample_size参数,所以我在bug报告中提出了这个问题,希望在未来的版本中,这是不必要的。

相关问题