pandas read_csv跳过开头几行用skiprows参数,可传整数、列表或函数;skiprows=2且header=0表示跳过前两行并将第三行设为列名;列表如[0,2,4]可跳过不连续行;函数lambda x: x
python pandas read_csv 跳过开头几行用 skiprows 参数
直接跳过 csv 文件前 n 行(比如标题行、说明文字、空行),核心就是 skiprows。它接受整数、列表或函数,最常用的是传一个整数——表示跳过从第 0 行开始的前 n 行。
常见错误是以为 header=1 就能跳过第一行,其实 header 只是告诉 pandas 哪一行当列名用,并不跳过数据;如果文件开头有 2 行废话,只设 header=2 会导致第 2 行被当列名,但第 0、1 行仍会作为数据读进来(除非它们恰好是空的,否则可能报错或错位)。
-
skiprows=1:跳过第 0 行(即第一行),后续所有行上移,第 1 行变成新第 0 行 - 要跳过前两行 + 把第三行当列名:用
skiprows=2, header=0 - 跳过第 0、2、4 行这种不连续的?传列表:
skiprows=[0, 2, 4] - 开头有不定长的注释行(如以 # 开头)?用函数:
skiprows=lambda x: x (注意:实际需配合 <code>read_csv的skiprows函数参数写法,不是链式调用)
MySQL LOAD DATA INFILE 忽略 CSV 头部行用 IGNORE N LINES
在 MySQL 原生命令导入 CSV 时,IGNORE N LINES 是唯一可靠跳过头部的方式,它在服务器端解析阶段就丢弃前 N 行,不进缓冲、不校验、不报错——比客户端预处理更高效,尤其对大文件。
容易踩的坑是混淆 LINES TERMINATED BY 和 IGNORE 的顺序,或者漏写 LINES 关键字(只写 IGNORE 1 会语法错误)。另外,该参数只认物理行,如果 CSV 中某行包含换行符(字段内换行),且没用引号包裹,MySQL 会误判行数,导致跳过不足或过度。
- 标准写法:
LOAD DATA INFILE '/path/data.csv' IGNORE 1 LINES INTO TABLE my_table ... -
IGNORE 1 LINES必须紧跟在INFILE路径之后、INTO TABLE之前 - Windows 换行(
\r\n)和 Linux(\n)都支持,但确保文件实际换行符与 MySQL 配置的LINES TERMINATED BY一致 - 跳过 3 行?写
IGNORE 3 LINES,不能写IGNORE 3
PostgreSQL COPY 命令没有内置跳过行功能,得靠外部预处理
COPY 命令本身不支持 SKIP 或 IGNORE LINES,官方文档明确说“no support for skipping header rows”。想跳过标题行,必须在数据进库前清理干净——要么用 shell 管道过滤,要么用临时表+CTE 过滤,要么改用 psql \copy 配合客户端工具。
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
有人试过在 COPY 里加 WHERE 来过滤,这是无效的,因为 COPY 是批量载入命令,不走 SQL 查询引擎;也有人想用 OFFSET,同样不生效。最稳的方案是别绕弯,老实用 tail -n +2 或 sed '1d' 切掉首行再导入。
- Linux/macOS 终端导入跳过第一行:
tail -n +2 data.csv | psql -c "COPY my_table FROM STDIN WITH (FORMAT CSV, HEADER false);" - Windows 下可用
more +2 data.csv | psql ...(注意more对大文件性能差) - 如果必须用服务端
COPY(如从数据库服务器本地读文件),先用sed -i '1d' /path/data.csv原地删头——但要注意权限和备份 - 用程序生成临时无头 CSV 比硬编码跳过逻辑更可控,尤其涉及编码(如 UTF-8 BOM)、引号转义时
Excel 转 CSV 后标题行乱码或格式残留,导致 skiprows 失效
很多人以为“导出为 CSV”就干净了,实际上 Excel 默认导出带 BOM(\ufeff),且可能把合并单元格转成空字段、把日期转成本地格式字符串,甚至保留不可见控制字符。这时 skiprows=1 看似跳过了第一行,实则因 BOM 占了第一个字节,pandas 把它当列名一部分,导致列名异常(如 ‘\ufeffname’),后续匹配列失败。
另一个典型现象是:明明跳过了 1 行,但数据还是错位——大概率是 Excel 导出时用了逗号分隔但字段含逗号却没加引号,CSV 解析器误拆字段,行计数偏移。
- 用文本编辑器(如 VS Code)打开 CSV,切换编码查看是否含 BOM;读取时显式指定:
encoding='utf-8-sig' - Excel 导出选“CSV UTF-8(逗号分隔)”,比默认“CSV(逗号分隔)”更规范
- 不确定格式是否干净?先用
head -n 5 data.csv看原始前五行,别信文件名或 Excel 预览 - 字段含换行、逗号、引号?导出时务必勾选“将文本限定符应用于所有字段”,否则任何跳过逻辑都建立在错误解析基础上
事情说清了就结束










