python Polars:在read_csv中一次为所有列指定dtypes

jogvjijk  于 2023-06-28  发布在  Python
关注(0)|答案(2)|浏览(436)

Polars中,如何为read_csv中的所有列指定一个dtype?
根据文档,dtypesread_csv的参数可以采用{'column_name': dtype}形式的Map(dict),也可以采用一个dtypes列表,每列一个。但是,不清楚如何指定“我希望所有列都是单个dtype”。
例如,如果你希望所有列都是UTF-8,并且你知道列的总数,你可以这样做:

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

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

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

但这在北极星上行不通。

v8wbuo2f

v8wbuo2f1#

将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))
t8e9dugd

t8e9dugd2#

如果你想把所有的列都读成str(在polars中是pl.Utf8),设置infer_schema_length=0为polars,在阅读csv时使用string作为默认类型:

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

这是ritchie46's more detailed answer的TLDR。我把它分解成一个单独的答案,因为他的代码片段解决了 any 数据类型的一般情况,而不是将所有数据类型都读取为字符串的特殊但常见的情况。

相关问题