python讀取大型csv文件的操作方法(降低內(nèi)存占用)
簡介
遇到大型的csv文件時,pandas會把該文件全部加載進內(nèi)存,從而導致程序運行速度變慢。
本文提供了批量讀取csv文件、讀取屬性列的方法,減輕內(nèi)存占用情況。
import pandas as pd input_file = 'data.csv'
讀取前多少行
加載前100000行數(shù)據(jù)
df = pd.read_csv(input_file, nrows=1e5) df
查看每個字段占用的系統(tǒng)內(nèi)存的情況
df.info(memory_usage='deep')
設(shè)置 memory_usage 的參數(shù)為 ‘deep’ 時,深度檢查對象中的內(nèi)存使用情況,包括對象中可能包含的其他對象(如列表、數(shù)組或其他數(shù)據(jù)結(jié)構(gòu))。若不設(shè)置deep參數(shù),memory_usage 只會返回一個對象的基礎(chǔ)內(nèi)存使用情況,這主要基于對象本身的內(nèi)存占用,而不考慮它可能引用的其他對象。

如上圖所示,前100000行數(shù)據(jù)共占用220.MB內(nèi)存。
查看每列屬性的內(nèi)存占用情況;
item = df.memory_usage(deep=True)

針對每個屬性列的字節(jié)數(shù)進行求和,使用/ (1024 ** 2),實現(xiàn)1B到1MB的單位轉(zhuǎn)換。驗證了所有屬性列的內(nèi)存占用確實為 220.8MB。

內(nèi)存占用從高到低降序排列:
df.memory_usage(deep=True).sort_values(ascending=False)

讀取屬性列
可能我們只關(guān)心, 一整張表中的某幾個屬性,比如:'企業(yè)名稱', '經(jīng)營范圍'。那么便無需把整張表加載進內(nèi)存。
df2 = pd.read_csv(input_file, nrows=1e5, usecols=['企業(yè)名稱', '經(jīng)營范圍'])
查看一下內(nèi)存占用
df2.memory_usage(deep=True).sum() / (1024 ** 2)

只讀取兩個屬性列,內(nèi)存占用只有33MB。
逐塊讀取整個文件
pd.read_csv(input_file, chunksize=1e3, nrows=1e5)
nrows=1e5: 讀取100000條數(shù)據(jù);chunksize=1e3: 每一塊是1000條數(shù)據(jù);
故1e5條數(shù)據(jù),應(yīng)該由100塊1e3的數(shù)據(jù)組成;
# 分批次讀取, 每chunksize是一個批次
chunk_dfs = pd.read_csv(input_file, chunksize=1e3, nrows=1e5)
v = 0
cnt = 0
# 每個chunk_df 都是 dataframe 類型數(shù)據(jù)
for chunk_df in chunk_dfs:
print(chunk_df.shape)
cnt += 1
v += chunk_df.shape[0]
print(v, cnt)

上圖驗證了,總共處理了1e5條數(shù)據(jù),分成了100塊進行讀取。
總結(jié)
pd.read_csv(input_file, nrows, usecols, chunksize)
nrows: 讀取多少行數(shù)據(jù);usecols: 讀取哪些屬性列的數(shù)據(jù);chunksize:分塊讀取,每一塊的大小是多少條數(shù)據(jù);
到此這篇關(guān)于python讀取大型csv文件的操作方法(降低內(nèi)存占用)的文章就介紹到這了,更多相關(guān)python讀取大型csv文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程)
這篇文章主要介紹了PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04
python實現(xiàn)同級目錄調(diào)用的示例詳解
同級目錄指的是位于同一級別的文件夾,這些文件夾具有相同的層級結(jié)構(gòu),它們相互平行,沒有一個被包含在另一個之中,本文將給大家介紹python實現(xiàn)同級目錄調(diào)用的示例,需要的朋友可以參考下2024-06-06

