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

Python处理分隔符异常CSV:修复列错位及解决NUL错误

解决CSV列错位与"line contains NUL"错误

一、快速修复列错位问题

你的核心问题是部分行因第二列缺失导致字段数不足,直接用pandas就能一步处理,无需手动拆分合并。通过指定列名并自定义异常行的处理逻辑,可让缺失的第二列自动填充NaN:

import pandas as pd

# 定义目标列名,与表头一致
target_cols = ['var1', 'var2', 'var3', 'var4', 'var5']

# 读取文件时,对字段数不足的行在第二位置插入空值(会被识别为NaN)
df = pd.read_csv(
    'myfile.csv',
    sep=';',
    names=target_cols,
    header=0,
    engine='python',
    on_bad_lines=lambda row: [row[0], None] + row[1:]
)

这段代码中,on_bad_lines的lambda函数会捕获字段数为4的行,将其从[2, 'mary', 34, 78]转换为[2, None, 'mary', 34, 78],完美匹配5列结构,最终得到你想要的结果。

二、解决"line contains NUL"错误

你用csv模块报错是因为文件中存在NUL字符(\x00),默认的csv.reader无法处理这类字符,可通过以下两种方式解决:

方式1:用csv模块过滤NUL并修复行结构

读取时先过滤每行的NUL字符,同时对字段数不足的行插入空值:

import csv

with open('myfile.csv', 'r', newline='', encoding='utf-8') as fin, open('output.csv', 'w', newline='', encoding='utf-8') as fout:
    # 生成器过滤每行的NUL字符
    filtered_lines = (line.replace('\x00', '') for line in fin)
    reader = csv.reader(filtered_lines, delimiter=';')
    writer = csv.writer(fout, delimiter=';')
    
    for row in reader:
        # 对字段数为4的行,在第二位置插入空字符串
        if len(row) == 4:
            row.insert(1, '')
        writer.writerow(row)

处理后的output.csv再用pandas读取,既不会错位,也不会触发NUL错误。

方式2:用pandas直接处理带NUL的文件

先读取文件内容并过滤NUL字符,再用StringIO模拟文件对象读取:

import pandas as pd
from io import StringIO

target_cols = ['var1', 'var2', 'var3', 'var4', 'var5']

with open('myfile.csv', 'r', encoding='utf-8') as f:
    # 读取全部内容并替换NUL字符
    clean_content = f.read().replace('\x00', '')

# 用StringIO传递清理后的内容给pandas
df = pd.read_csv(
    StringIO(clean_content),
    sep=';',
    names=target_cols,
    header=0,
    engine='python',
    on_bad_lines=lambda row: [row[0], None] + row[1:]
)

最终效果

处理后得到的DataFrame符合预期:

var1  var2   var3  var4  var5
0     1  10.0   john    40    56
1     2   NaN   mary    34    78
2     3  90.0  smith    52    45

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:55:15