Python Pandas read_csv-使用usecols选项运行时无法读取
我正在尝试使用panda软件包读取一个大的tsv文件。tsv是从一个zip文件中提取的,该文件分别包含头文件名。这不是我写的-我从一个外部来源得到这个文件,它是一个点击流数据。我在一个amazon虚拟实例上通过jupyter笔记本运行了这个程序 我的代码如下: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
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选项有一些问题