Python Pandas read_csv-使用usecols选项运行时无法读取

Python Pandas read_csv-使用usecols选项运行时无法读取,python,csv,pandas,Python,Csv,Pandas,我正在尝试使用panda软件包读取一个大的tsv文件。tsv是从一个zip文件中提取的,该文件分别包含头文件名。这不是我写的-我从一个外部来源得到这个文件,它是一个点击流数据。我在一个amazon虚拟实例上通过jupyter笔记本运行了这个程序 我的代码如下: df = pd.read_csv(zf.open(item[:-4]), compression = None, sep = '\t', parse_dates = True, names = df_heade

我正在尝试使用panda软件包读取一个大的tsv文件。tsv是从一个zip文件中提取的,该文件分别包含头文件名。这不是我写的-我从一个外部来源得到这个文件,它是一个点击流数据。我在一个amazon虚拟实例上通过jupyter笔记本运行了这个程序

我的代码如下:

df = pd.read_csv(zf.open(item[:-4]), 
   compression = None, 
   sep = '\t',
   parse_dates = True,
   names = df_headers,
   usecols = columns_to_include,
   error_bad_lines = False)
df_标题是Sperate tsv上提供的680个字段。 我的问题是,我收到了数百个此类错误:

跳过第158548行:预计680个字段,SAW865

跳过第181906行:预计680个字段,SAW865

跳过第306190行:预期为680个字段,saw 689 跳过第306191行:预期为680个字段,saw 686

跳过第469427行:预期为680个字段,saw 1191

跳过第604104行:预计680个字段,saw 865

然后操作停止,并进行以下回溯

raise VALUERROR“迭代不支持跳过页脚”

然后: pandas.parser.textleader.read pandas/parser.c:7988中的pandas/parser.pyx

pandas/parser.pyx在pandas.parser.TextReader.\u read\u low\u memory pandas/parser.c:8244

pandas.parser.TextReader.\u read\u pandas/parser.c:9261中的pandas/parser.pyx

pandas.parser.TextReader.\u convert\u column\u data pandas/parser.c:10190中的pandas/parser.pyx

CParserError:指定的列太多:应为680,但找到489

这不是我第一次以这种方式阅读文件——我读了很多文件,通常只有不到10个这样的错误,我可以忽略并阅读这些文件。我不知道为什么这次有问题的行数如此之多,以及为什么读取停止。 我怎样才能继续?我甚至无法打开tsv,因为它们太大了。当我尝试一种应该可以打开大文件的工具时,我找不到错误行,因为行号与错误中报告的行号不相似……即。我不能去158548排看看有什么问题。。。 任何帮助都将不胜感激!这对我来说非常重要

编辑: 当我在没有usecols选项的情况下运行read_csv时,我只在大文件的一个子集上尝试了它——它成功了。出于某种原因,这些使用会给熊猫识别真正的柱子带来一些问题。。。我将pandas版本更新为0.19.2,因为我看到有一些关于usecols选项的错误修复,但现在我有一个更糟糕的问题-当我使用nrows=在文件的子集上运行读取时,无论是否使用usecols,我都会得到不同的结果:使用usecols,我会得到以下错误:

CParserError:标记数据时出错。C错误:捕获到缓冲区溢出-可能是输入文件格式错误

现在我甚至不知道在哪一行

如果我在不使用usecols的情况下运行它,我会设法读取数据,但-我只能对~700000行中的200000行数据的子集进行读取-当我每次尝试读取200000行,然后附加创建的数据帧时,我会得到一个内存问题错误


usecols列的数量大约为100,而整个列的数量几乎为700。我有几十个这样的文件,每个文件大约有700000行。

回答了一个特定的情况:当您在熊猫中加载数据帧时,没有标题标记为“通过/失败发生的数据帧”等,该文件有大量的列,并且有一些空列,因此,在进程错误期间将出现一个问题:指定的列太多

在这种情况下,请尝试使用:

df = pd.read_csv('file.csv', header=None, low_memory=False)
内存不足允许您加载所有这些数据,甚至按顺序加载完整的空列

注:

考虑将熊猫作为pd进口

考虑到你的文件在jupyter笔记本的同一目录中

笔记本电脑,16GB RAM内存+i5 vPro 2核


这可能意味着这些行上的某些字段包含逗号,因此解析器将它们视为附加的分隔符标记。您应该检查文件格式是否正确,或者您是否忘记了read_csv上的参数,如引用参数Hanks!有没有关于如何查看该文件的建议?它太大了,无法在excel中打开…我的小猪应该是printopen'sickfile.tsv.readlines[158548]试试通用的,而不是pd.read\u csv.Thank,@Parfait,Boud,这些都不管用。。。我编辑了这个问题-usecols选项有一些问题