Polars:在 read_csv 中一次为所有列指定数据类型
Polars: Specify dtypes for all columns at once in read_csv
在 Polars 中,如何为 read_csv
中的所有列指定一个数据类型?
根据docs,read_csv
的dtypes
参数可以采用{'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))
在 Polars 中,如何为 read_csv
中的所有列指定一个数据类型?
根据docs,read_csv
的dtypes
参数可以采用{'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))