如何使用Pandas處理超大csv文件

之前使用Python讀取超大CSV文件時,出現MemoryError錯誤,甚至死機。。。嘔心瀝血潛心研究後,發現使用pandas的read_csv模塊通過分塊讀取,可以完美解決針對超大CSV文件進行數據分析處理時的內存不足問題,接下來與大家分享一下。

pandas 安裝

Anaconda是一個開源的Python發行版本,其包含了conda、Python、numpy、pandas等180多個科學包及其依賴項。建議直接安裝Anaconda2 或 Anaconda3 ,最好裝64位。

下載地址如下:

https://www.anaconda.com/

read_csv官方文檔鏈接:

http://pandas.pydata.org/pandas-docs/stable/io.html#io-read-csv-table

從官方文檔中我們注意到chunksize 、iterator兩個參數,下面我們就這兩個參數做詳細介紹 。

Iteration

iterator : boolean, default False

Return TextFileReader object for iteration or getting chunks with get_chunk().

chunksize : int, default None

Return TextFileReader object for iteration. See iterating and chunking below.

read_csv——chunksize參數介紹

read_csv中有個參數chunksize,通過指定一個chunksize分塊大小來讀取文件,返回的是一個可迭代的對象TextFileReader,分塊處理可以避免將所有的文件載入內存,僅在使用的時候讀入所需內容。數據的處理和清洗通常使用分塊的方式處理,可以大大降低內存的使用,同時耗時要相對長一些。

import pandas as pd
reader = pd.read_csv('pandas.csv', sep='|',chunksize=2)
for chunksize_data in reader:
print chunksize_data

輸出

如何使用Pandas處理超大csv文件

read_csv——iterator參數

指定iterator=True 也可以返回一個可迭代對象TextFileReader。

import pandas as pd
reader = pd.read_table('pandas.csv', sep='|', iterator=True)
status = True
while status:
try:
chunk = reader.get_chunk(2)
print chunk
except StopIteration:
status = False

輸出

如何使用Pandas處理超大csv文件

除了通過分塊避免一次性將全部內容加載至內存中,還可以嘗試如下方式讀取超大csv文件進行數據分析、處理。

  1. 對數據進行降維
  2. 增大機器內存或使用spark集群(pyspark)


分享到:


相關文章: