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

问题描述 投票:0回答:2

Polars 中,如何为

read_csv
中的所有列指定单一数据类型?

根据 docs

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

如果您希望所有列都是字符串,并且您知道列的总数,您可以这样做:

pl.read_csv('sample.csv', schema_overrides=[pl.String]*number_of_columns)

但是,如果您不知道总列数,则此方法不起作用。 在 Pandas 中,你可以这样做:

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

但这在 Polars 中不起作用。

python python-polars
2个回答
20
投票

将 csv 中的所有数据读取为

pl.String
之外的任何其他类型可能会因大量
null
值而失败。我们可以使用表达式来声明我们要如何处理这些空值。

如果您使用

infer_schema_length=0
读取 csv,Polars 不知道架构,并且会将所有列读取为
pl.String
,因为这是所有 Polars 类型的超类型。

当读作

String
时,我们可以使用表达式来转换所有列。

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

6
投票

如果您想将所有列读取为

str
(极坐标中的
pl.String
),请设置
infer_schema_length=0
,因为极坐标在读取 csv 时使用字符串作为默认类型:

pl.read_csv('sample.csv', infer_schema_length=0)

这是 ritchie46 更详细的答案的 TLDR 。我将其分解为一个单独的答案,因为他的代码片段解决了 any 数据类型的一般情况,而不是将所有内容读取为字符串的特殊但常见情况。

© www.soinside.com 2019 - 2024. All rights reserved.