在用pd.read_csv读取txt文档时出现这个问题,先看下翻译:
这个错误通常在读取CSV文件时出现,它表明在解析CSV文件的某一行时出现问题。具体而言,该错误表示在第244行中,Pandas期望在该行中看到10个字段,但实际上读取的是11个字段,这导致了解析错误。
我打开txt文档看了一下,问题是计数错误,出现错误的那一行多了数据。
解决方法:
1.手动改txt的错误位置(太麻烦pass)
2.在读取CSV文件时使用pd.read_csv()
函数的参数error_bad_lines
和engine
。error_bad_lines=False
参数将跳过错误行并继续读取剩余部分,
参数可以控制当遇到数据行字段数量不匹配等异常情况时的处理方式,若是遇到该错误将跳过不合格的行继续读取原始数据,而不是抛出异常并终止程序运行。
我们试一下error_bad_lines=False这个参数:
改之前:
data=pd.read_csv(position, sep='\t', encoding='gb2312',skiprows=[0],header=None)
改之后:
data=pd.read_csv(position, sep='\t', encoding='gb2312',skiprows=[0],header=None,error_bad_lines=False)
结果虽然有警告,但是确实时跳过错误行,读取下一行数据。
更新一下:
新问题:字段报错的问题确实解决,但是用的error_bad_lines=False
会导致数据读取不完整,对我后面的工作有影响
解决方法:
1.指定解析器:Pandas的read_csv()
函数支持多种解析器,默认使用的是C解析器,但可能不适用于所有情况。可以尝试使用Python解析器或其他可用的解析器。例如:
df = pd.read_csv('filename.csv', engine='python')
2.指定分隔符和引号:对于字段包含特殊字符的情况,可以尝试指定分隔符和引号。例如:
df = pd.read_csv('filename.csv', delimiter='|', quotechar='"')
虽然这两个可以尝试,但是最后还是没解决我的问题(暂时)。我打算不用pandas库去读取数据,换别的方法试一下:
1.csv 库。这是 Python 自带的标准库,功能简单但易用。使用该库,你可以直接打开 CSV 文件,并将其转化为可遍历的 CSV 行对象,然后逐行处理数据
import csv with open(position, 'r', encoding='gb2312') as f: reader = csv.reader(f) for row in reader: print(row)
2.numpy 库。除了支持数值计算外,numpy 也可以用来读取 CSV 文件。使用该库,你可以直接将 CSV 文件加载到一个 numpy 数组中,方便进行数值计算和数据分析
import numpy as np data = np.loadtxt(position, delimiter='\t', dtype=str, encoding='gb2312') print(data)
3.Dask 库。如果你需要读取大型 CSV 文件,则 Dask 库可能更适合你。使用该库,你可以将 CSV 文件读入一个分布式 DataFrame,使用类似 Pandas 的语法进行数据处理
import dask.dataframe as dd df = dd.read_csv(position, delimiter='\t', dtype=str, encoding='gb2312') print(df.head())
尝试了2.3方法,本质都是列数不对(理论是10列,实际那一行出现问题出现11列)
大招!!!
使用 usecols
参数选取需要的列
data=pd.read_csv(position, sep='\t', encoding='gb2312',header=0, usecols=range(0, 10))
这样就选取前10列啦,不会报错,错误行也不会跳过导致读取数据不完整。