如何在Polars中将所有列读取为字符串类型?
如何将CSV所有列读取为字符串类型(Rust Polars)
要让Polars读取CSV时把所有列都转成字符串类型,你可以通过指定强制Schema来实现——也就是明确告诉阅读器所有列都用Utf8类型解析,跳过自动推断原数据类型的逻辑。分两种场景处理:
场景1:已知CSV的列名
直接构造包含所有列名、类型统一为Utf8的Schema,传给CsvReader的with_schema方法:
use polars::prelude::*; // 构造全Utf8类型的Schema,列名替换成你的CSV实际列名 let schema = Schema::from(vec![ Field::new("column_a", DataType::Utf8), Field::new("column_b", DataType::Utf8), Field::new("column_c", DataType::Utf8), // 依次添加所有列 ]); let df = CsvReader::from_path(filecsv)? .has_header(true) .with_schema(&schema) // 强制使用指定Schema解析 .finish()?;
场景2:不知道CSV的列名
先读取表头获取所有列名,再动态生成全Utf8类型的Schema,最后用这个Schema读取数据:
use polars::prelude::*; // 第一步:读取表头获取列名 let header_names = CsvReader::from_path(filecsv)? .has_header(true) .finish()? .get_column_names() .to_vec(); // 第二步:生成全Utf8类型的Schema let schema = Schema::from( header_names.into_iter() .map(|col_name| Field::new(col_name, DataType::Utf8)) .collect::<Vec<_>>() ); // 第三步:用指定Schema读取完整数据 let df = CsvReader::from_path(filecsv)? .has_header(true) .with_schema(&schema) .finish()?;
这样处理后,不管原CSV里的列是数字还是其他类型,都会被统一解析为字符串类型的列。
内容的提问来源于stack exchange,提问作者krakotay
相关产品推荐
相关产品推荐

