Tecnología · GUÍA PRÁCTICA
¿pandas conserva filas CSV incorrectas con skip? Valida antes de usecols
on_bad_lines es una política del analizador, no una validación completa del esquema. Cuenta campos lógicos antes de proyectar y concilia registros después.

Un CSV puede cargar sin errores y conservar registros cortos, campos adicionales descartados o un índice inesperado. La referencia actual de read_csv define una línea incorrecta para on_bad_lines como una con demasiados campos. No promete eliminar todo registro inválido para el negocio.
Separar omisión y validación
Confirma delimitador, comillas, codificación y esquema del productor. Registra versión de pandas, motor, header, names, index_col, usecols, tratamiento de blancos y comentarios y política de líneas incorrectas. La extensión .csv no determina esas elecciones.
La API actual dice que warn también omite la línea, mientras skip no emite esa advertencia. Ninguno es una reparación sin pérdidas. Conserva el original y aplica reglas explícitas de rechazo solo si puedes contabilizar los registros excluidos.
Auditar registros lógicos antes de proyectar
Con codificación y dialecto conocidos, abre una copia con newline='' e itera csv.reader(..., strict=True). Contrasta cabecera con nombres aprobados y len(row) de cada registro con el ancho requerido. Conserva discrepancias y ubicación por separado; no cuentes comas en texto bruto.
strict=True comprueba sintaxis CSV, no tu esquema. Registra reader.line_num antes y después para identificar el intervalo físico; saltos de línea entre comillas permiten registros multilínea. Alinea reglas de blancos y comentarios antes de contar y detente ante errores, sin inventar límites de registros.
Cuatro controles explican las trampas
Probamos CSV sintéticos de tres columnas con pandas 2.2.3 y Python 3.12.14. Un registro posterior de cuatro campos produjo ParserError y skip lo eliminó. Con usecols permaneció el registro, descartando el campo extra. Uno de dos campos quedó con un valor ausente. Son resultados de ese entorno, no una ejecución del pandas 3.0.6 actual.
Con cuatro campos en el primer registro, la lectura predeterminada infirió un índice y desplazó valores. index_col=False devolvió tres columnas con advertencia de pérdida, no una reparación. Otro campo multilínea entre comillas fue un registro válido de tres campos en dos líneas físicas. Ninguna opción certificó los cuatro casos.
Reparar solo con una regla verificable
Si fallaban dialecto o cabecera, corrige ajustes en una copia. Para un registro realmente defectuoso, solicita una exportación correcta o aísla según una regla explícita. No elimines ciegamente el último campo: un delimitador inesperado pudo partir un valor significativo por la mitad.
Después verifica orden de columnas e índice, identificadores obligatorios, duplicados y restricciones del negocio. Con iguales filtros, concilia registros aceptados y rechazados con la auditoría lógica del origen. Igual número de campos es solo evidencia estructural; no prueba significado correcto ni conservación de toda la información tras proyectar.
