1. 程式人生 > >資料處理:用pandas處理大型csv檔案

資料處理:用pandas處理大型csv檔案

在訓練機器學習模型的過程中,源資料常常不符合我們的要求。大量繁雜的資料,需要按照我們的需求進行過濾。拿到我們想要的資料格式,並建立能夠反映資料間邏輯結構的資料表達形式。
最近就拿到一個小任務,需要處理70多萬條資料。

我們在處理csv檔案時,經常使用pandas,可以幫助處理較大的csv檔案。

pandas 中處理CSV 檔案的函式主要為read_csv()to_csv()這兩個,其中read_csv() 讀取CSV 檔案的內容並返回DataFrameto_csv() 則是其逆過程。

在之前的部落格中,曾寫過用pandas按照一行一行的方式來讀取csv檔案的方式,具體可以看這篇連結。

Python基礎:csv檔案的讀寫(pandas,csv兩種方式)
但這樣讀取的方式,顯然比較低效,下面是我自己在處理資料時使用過的一些比較實用的方法。

1.讀取限定列

一個csv檔案中,往往有很多不同的列,而我們通常只關注其中的某些列,如果把每行都讀取出來,再提取資訊,顯然會增加IO量,因此我們可以在讀檔案的時候,給定read_csv()方法的引數,從而提高效率。

file = pd.read_csv('demo.csv',usecols=['column1', 'column2', 'column3'])

usecols引數中,給定了要讀取的3列,file中則只包含這3列的資訊。

2.讀取限定行

實際寫程式碼的過程中,往往需要先跑一部分資料進行測試,測試通過後,再處理所有的資料。也可能我們僅僅需要一部分資料進行運算。這時候就可以使用read_csv()方法中的nrows引數,設定讀取的行數。

file = pd.read_csv('demo.csv',nrows=1000,usecols=['column1', 'column2', 'column3'])

僅讀取前1000行資料。

3.分塊讀取

read_csv()方法中還有一個引數,chunksize,可以指定一個chunksize分塊大小來讀取檔案。與直接使用df進行遍歷不同的是,它返回的是一個TextFileReader

型別的物件。

reader = pd.read_csv('demo.csv',nrows=10000,
                     usecols=['column1','column2','column3'], 
                     chunksize=1000,iterator=True)
reader

output:
<pandas.io.parsers.TextFileReader at 0x120d2f290>

4.其他

head()和tail()

拿到一個很大的csv檔案後,為了看清檔案的格式,可以使用該方法,先檢視前10條資料。head()方法預設是10條,也可以用tail()方法檢視最後10條資料。

file = pd.read_csv('demo.csv')
df = pd.DataFrame(file)

df.head()
df.tail()

目前用到的就是這些,之後用到再補充。

拿到資料之後,分析資料之間的邏輯,建立相應的能夠表示資料間邏輯關係的資料結構,再進行相應的處理。


學習中,請多指教!