[英]Loading large csv file in pandas
我正在嘗試在熊貓數據框中加載csv文件。 但是,Python在加載文件時占用了大量內存。 例如,csv文件的大小為289 MB,但在我嘗試加載文件時,內存使用量約為1700 MB。 此時,系統顯示內存錯誤。 我也嘗試過塊大小,但問題仍然存在。 誰能告訴我前進的方向嗎?
好,首先,不要混淆磁盤大小和內存大小。 CSV的核心是純文本文件,而pandas數據框是加載到內存中的復雜對象。 就是說,鑒於我不知道您的csv文件中有什么內容,因此我無法就您的特殊情況發表聲明。 因此,我將為您提供一個在計算機上具有類似大小的csv的示例:
-rw-rw-r-- 1 alex users 341M Jan 12 2017 cpromo_2017_01_12_rec.csv
現在閱讀CSV:
>>> import pandas as pd
>>> df = pd.read_csv('cpromo_2017_01_12_rec.csv')
>>> sys:1: DtypeWarning: Columns (9) have mixed types. Specify dtype option on import or set low_memory=False.
>>> df.memory_usage(deep=True).sum() / 1024**2
1474.4243307113647
熊貓將盡最大努力對其進行優化,但它不可能做到不可能。 如果您的內存不足,那么這個答案是一個很好的起點 。 另外,您也可以嘗試使用dask,但我認為對於小型csv而言這工作太多了。
您可以使用庫“ dask”
例如:
# Dataframes implement the Pandas API
import dask.dataframe as dd`<br>
df = dd.read_csv('s3://.../2018-*-*.csv')
嘗試這樣-1)加載dask,然后2)轉換為熊貓
import pandas as pd
import dask.dataframe as dd
import time
t=time.clock()
df_train = dd.read_csv('../data/train.csv', usecols=[col1, col2])
df_train=df_train.compute()
print("load train: " , time.clock()-t)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.