如何用Polars将单列数据集按首行名称拆分为6列
问题分析与修复方案
你的代码存在几个关键问题,导致无法正确拆分数据集:
- 错误地用
open()直接转换为Polars DataFrame,Polars有专门的CSV读取方法,无需手动打开文件 split()方法使用错误,Polars中字符串操作需要通过str命名空间调用- 列赋值方式不符合Polars的语法规范
修正后的代码
import polars as pl # 读取单列CSV文件,先不识别表头(因为首行是列名但当前被放在数据列里) data_raw = pl.read_csv( 'C:\\Users\\DESKTOP\\Documents\\Pedro Amorim\\dados_de_poço\\dado_campos\\dado_campos1.csv', has_header=False, new_columns=["raw_data"] # 给唯一的列命名 ) # 获取首行的列名(原首行的内容) column_names = data_raw[0, "raw_data"].split() # 从第二行开始处理数据,拆分单列为6列 data_processed = data_raw[1:].with_columns( pl.col("raw_data").str.split(' ', max_split=5, expand=True).alias("split_cols") ).unnest("split_cols") # 给拆分后的列命名 data_processed = data_processed.rename({f"column_{i}": name for i, name in enumerate(column_names)}) print(data_processed)
关键修复点说明
- 正确读取CSV:用
pl.read_csv()直接读取文件,指定has_header=False避免把首行列名误判为数据,同时给唯一列命名方便后续操作 - 提取列名:从第一行数据中提取需要的列名列表
- 拆分列:使用
str.split()并设置max_split=5确保拆分为6列,再通过unnest()展开为独立列 - 重命名列:将拆分后的默认列名替换为原首行的内容
如果你的原文件是因为分隔符(多个空格)未被识别导致合并为单列,也可以尝试更简单的自动分隔符检测读取:
data_raw = pl.read_csv( 'C:\\Users\\DESKTOP\\Documents\\Pedro Amorim\\dados_de_poço\\dado_campos\\dado_campos1.csv', sep=r'\s+' # 匹配任意数量的空格作为分隔符 ) print(data_raw)
内容的提问来源于stack exchange,提问作者Pedro Cássio Dias de Amorim
相关产品推荐
相关产品推荐

