You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dask选取DataFrame列子集时列值错位的原因及解决方法

列值错位的原因
  • Dask读取CSV文件时默认仅采样文件开头的少量行推断列数、字段分隔规则、列类型,若你的CSV文件中存在部分行包含未被引号包裹的逗号分隔符、行字段数缺失/多余、换行符异常这类格式问题,采样阶段没有识别到这些异常,就会给不同分区的数据应用错误的字段拆分规则。你首次调用compute仅展示前几行采样范围内的正常数据,看起来结构正确,但后续处理全量数据时,异常行的拆分错误就会显现,且因不同分区的异常数据分布不同,错位顺序会随机变化。
修复方法
  • 读取文件时手动指定列名、列类型,同时调大采样范围避免自动推断出错,示例代码如下:
# 按照原始CSV的列顺序手动指定所有列名
col_list = ["Unnamed: 0", "val1", "val2", "crop", "val_int", "val_3", "val_4", "y"]
# 手动指定每列的数据类型,避免Dask推断错误
dtype_map = {
    "Unnamed: 0": int,
    "val1": float,
    "val2": float,
    "crop": str,
    "val_int": float,
    "val_3": float,
    "val_4": float,
    "y": float
}
df = dd.read_csv(
    "table/short_table.csv",
    header=0, # 跳过原始文件的表头行
    names=col_list,
    dtype=dtype_map,
    sample=10**9, # 采样范围设为1GB,小文件可覆盖全量内容,确保分隔规则推断正确
    on_bad_lines="skip" # 可选配置,遇到格式异常的行直接跳过,避免干扰整体结构
)
  • 读取完成后再选择需要的列子集即可得到列值匹配的结果:
df_sub = df[["crop", "val_int", "val1", "val2", "y"]]
df_sub.compute()
  • 如果调整参数后仍存在错位,可先用pandas读取全量CSV,检查是否存在格式异常的脏数据,清理后再用Dask读取即可。

内容的提问来源于stack exchange,提问作者Reut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:45:05