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
相关产品推荐
相关产品推荐

