在 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 中不起作用。
将 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))
如果您想将所有列读取为
str
(极坐标中的 pl.String
),请设置 infer_schema_length=0
,因为极坐标在读取 csv 时使用字符串作为默认类型:
pl.read_csv('sample.csv', infer_schema_length=0)
这是 ritchie46 更详细的答案的 TLDR 。我将其分解为一个单独的答案,因为他的代码片段解决了 any 数据类型的一般情况,而不是将所有内容读取为字符串的特殊但常见情况。