使用pandas读取CSV文件时如何正确跳过开头非数据行并处理列数不匹配问题
使用pandas读取CSV文件时如何正确跳过开头非数据行并处理列数不匹配问题
我来帮你搞定这个CSV读取的问题~ 你遇到的核心问题是skiprows参数用错了,导致前面的列定义行和空行没被完全跳过,进而引发列数不匹配的错误。
先理清楚你的文件结构:
- 前20行是两列格式的列定义
- 21-23行是空行
- 真正的18列数据从第24行开始(对应Python的0基索引是23)
你之前写的skiprows=[23]只会单独跳过第24行,但前面的23行(0到22索引)还会被pandas读取,这些行只有2列,和后面数据的18列格式冲突,自然会报错或者读取结果异常。
正确的解决方法
你需要跳过所有前23行(也就是原文件的1-23行),让pandas直接从第24行开始读取数据。具体代码如下:
import pandas as pd # 跳过前23行(0到22索引),数据从第24行开始 # 如果数据的第一行(原文件第24行)是表头,用header=0;如果没有表头,用header=None并自行指定列名 data = pd.read_csv(fileURL, skiprows=range(23), header=0)
如果数据行里偶尔还有格式错误的行,可以加上on_bad_lines='skip'来跳过异常行,但前提是已经跳过了前面的非数据行,这样就不会把列定义当成错误行处理了:
data = pd.read_csv(fileURL, skiprows=range(23), header=0, on_bad_lines='skip')
补充说明
skiprows=range(23)等价于跳过索引0到22的所有行,正好对应原文件的前23行(列定义+空行)- 如果你的数据没有表头,记得把
header=0改成header=None,然后可以用names参数给数据指定自定义列名,比如:col_names = [f'col_{i}' for i in range(18)] # 假设数据有18列 data = pd.read_csv(fileURL, skiprows=range(23), header=None, names=col_names)
这样应该就能正确读取到那20k行数据了~
备注:内容来源于stack exchange,提问作者Seamus
相关产品推荐
相关产品推荐

