簡體   English   中英

加載大型 csv 文件時 Python Pandas 解析器錯誤

[英]Python Pandas Parser Error when loading large csv file

我正在學習如何通過 pandas 將大型 csv 文件加載到 python 中。 我正在使用 anaconda 和 python 3 和 64 GB RAM 的電腦。

Loan_Portfolio_Example_Large.csv 數據集由 2509 列和 100,000 行組成,大小約為 1.4 GB。

我可以運行以下代碼而不會出錯:

MyList=[]
Chunk_Size = 10000
for chunk in pd.read_csv('Loan_Portfolio_Example_Large.csv', chunksize=Chunk_Size):
    MyList.append(chunk)

但是,當我使用 Loan_Portfolio_Example_Large.csv 文件創建一個更大的文件,即 Loan_Portfolio_Example_Larger.csv 時,以下代碼會產生錯誤。

請注意,我為創建更大的文件所做的只是從 Loan_Portfolio_Example_Large.csv 復制 100,000 行並將它們粘貼 4 次(即,粘貼到 excel 中的較低行並保存為包含 005 行的文件)和 2509 列(這個文件大約 4.2 GB)。

下面的代碼會產生一個解析器錯誤,我不確定為什么由於數據只是變得更大,我沒有以任何其他方式更改 csv 文件的結構,我應該有很多 memory,我增加了塊大小不應該引起任何問題。

有什么想法嗎? 我想知道 csv 在保存時是否以某種方式損壞(考慮到它太大了。)

MyList=[]
Chunk_Size = 100000
for chunk in pd.read_csv('Loan_Portfolio_Example_Larger.csv', chunksize=Chunk_Size):
    MyList.append(chunk)

錯誤 output:

-------------------------------------------------- ------------------------- ParserError Traceback (最近一次調用最后一次) in 2 MyList=[] 3 Chunk_Size = 100000 ----> 4 for pd.read_csv('Loan_Portfolio_Example_Larger.csv', chunksize=Chunk_Size) 中的塊:5 MyList.append(chunk) 6 print("--- %s seconds ---" % (time.time() - start_time))

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in next (self) 1126 def next (self): 1127 try: -> 1128 return self.get_chunk() 1129 除了 StopIteration: 1130 self 。關()

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in get_chunk(self, size) 1186 raise StopIteration
1187 大小 = 最小(大小,self.nrows - self._currow)-> 1188 返回 self.read(nrows=size)1189 1190

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in read(self, nrows) 1152 def read(self, nrows=None): 1153
nrows = _validate_integer("nrows", nrows) -> 1154 ret = self._engine.read(nrows) 1155 1156 # 可能改變列 / col_dict

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in read(self, nrows) 2057 def read(self, nrows=None): 2058
嘗試:-> 2059 data = self._reader.read(nrows) 2060 除了 StopIteration: 2061 if self._first_chunk:

pandas._libs.parsers.TextReader.read() 中的 pandas_libs\parsers.pyx

pandas._libs.parsers.TextReader._read_low_memory() 中的 pandas_libs\parsers.pyx

pandas._libs.parsers.TextReader._read_rows() 中的 pandas_libs\parsers.pyx

pandas._libs.parsers.TextReader._tokenize_rows() 中的 pandas_libs\parsers.pyx

pandas._libs.parsers.raise_parser_error() 中的 pandas_libs\parsers.pyx

ParserError:錯誤標記數據。 C 錯誤:預計第 145134 行中有 2509 個字段,看到 3802

似乎記錄 145134 在數據中有一些分隔符,並使它看起來有更多的列。 嘗試將read_csv與以下參數一起使用,這樣它會讓您了解有問題的記錄,但不會停止該過程。

pd.read_csv('Loan_Portfolio_Example_Large.csv', 
             chunksize=Chunk_Size, 
             error_bad_lines=False,
             warn_bad_lines=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM