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

Python中确定CSV文件列数及处理列数不一致的读取报错问题

嘿,我来帮你搞定这两个CSV相关的Python问题!

问题1:如何在Python中确定CSV文件的列数?

这里有两种实用的方法,根据你的需求选就行:

  • 用pandas快速搞定(适合规范CSV):如果你的CSV大部分行列数一致,直接用pandas读取后看shape属性就能得到列数:
import pandas as pd
df = pd.read_csv('your_file.csv', header=None)
column_count = df.shape[1]
print(f"文件列数:{column_count}")

要是文件太大不想全读,只读第一行也能行:

df = pd.read_csv('your_file.csv', header=None, nrows=1)
column_count = len(df.columns)
  • 用内置csv模块(灵活处理不规范CSV):如果你的CSV里有行列数不一致的情况,这个方法能帮你检查每行的列数,甚至统计最大列数:
import csv
with open('your_file.csv', 'r') as f:
    reader = csv.reader(f)
    # 先读第一行的列数
    first_row_cols = len(next(reader))
    print(f"第一行列数:{first_row_cols}")
    
    # 遍历所有行,找出最大列数
    max_cols = first_row_cols
    for row in reader:
        current_cols = len(row)
        if current_cols > max_cols:
            max_cols = current_cols
    print(f"文件最大列数:{max_cols}")
问题2:处理行列数不一致的CSV,只保留前2列

你碰到的报错是因为pandas默认会根据初始行的列数来推断整个文件的列数,后面出现4列的行就会触发解析错误。解决这个问题最精准的方法就是直接告诉pandas只读取前2列,不管后面有多少列都忽略:

修改你的代码,加上usecols=[0,1]参数就搞定了:

df = pd.read_csv(path, header=None, nrows=NUM_OF_CONF_ROWS, skiprows=2, usecols=[0,1])

这样pandas只会提取每行的第0和第1列(也就是前两列),完全不会管后面的列,自然就不会报错了。

另外,如果你的CSV还有其他格式问题,也可以用on_bad_lines='skip'参数跳过有问题的行,但这个方法会直接丢弃整行,不如usecols稳妥——毕竟我们的需求是保留前两列,而不是丢掉整行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:58:14