Polars:在 read_csv 中一次为所有列指定数据类型

Polars: Specify dtypes for all columns at once in read_csv

Polars 中,如何为 read_csv 中的所有列指定一个数据类型?

根据docsread_csvdtypes参数可以采用{'column_name': dtype}形式的映射(dict)或dtypes列表, 每列一个。 但是,尚不清楚如何指定“我希望所有列都是单个数据类型”。

例如,如果您希望所有列都是 Utf-8,并且您知道列的总数,您可以这样做:

pl.read_csv('sample.csv', dtypes=[pl.Utf8]*number_of_columns)

但是,如果您不知道总列数,这将不起作用。 在 Pandas 中,您可以执行以下操作:

pd.read_csv('sample.csv', dtype=str)

但这在 Polars 中不起作用。

将 csv 中的所有数据读取为 pl.Utf8 以外的任何其他类型可能会失败,并且会出现很多 null 值。我们可以使用表达式来声明我们要如何处理这些空值。

如果您使用 infer_schema_length=0 读取 csv,polars 不知道架构并将所有列读取为 pl.Utf8,因为这是所有 polars 类型的超类型。

当读作 Utf8 时,我们可以使用表达式来转换所有列。

(pl.read_csv("test.csv", infer_schema_length=0)
   .with_columns(pl.all().cast(pl.Int32, strict=False))