Zaten sağlanan potansiyel çözümlerin çoğunu temel alarak daha kapsamlı bir cevap vermek istiyorum. Ayrıca okuma sürecine yardımcı olabilecek bir potansiyel yardım daha belirtmek istiyorum.
1.Seçenek: Türler
"dtypes" read
yöntemlerin bellek basıncını düşürmek için kullanabileceğiniz oldukça güçlü bir parametredir . Bkz bu ve bu cevap. Pandalar varsayılan olarak verilerin türlerini çıkarmaya çalışırlar.
Veri yapılarına atıfta bulunulan her veri, bir bellek tahsisi gerçekleşir. Temel düzeyde aşağıdaki değerlere bakın (Aşağıdaki tabloda C programlama dili değerleri gösterilmektedir):
The maximum value of UNSIGNED CHAR = 255
The minimum value of SHORT INT = -32768
The maximum value of SHORT INT = 32767
The minimum value of INT = -2147483648
The maximum value of INT = 2147483647
The minimum value of CHAR = -128
The maximum value of CHAR = 127
The minimum value of LONG = -9223372036854775808
The maximum value of LONG = 9223372036854775807
NumPy ve C tipleri arasındaki eşleşmeyi görmek için bu sayfaya bakın .
Let Diyelim ki bir tamsayı dizisi olduğunu varsayalım basamak . Teorik ve pratik olarak 16 bit tamsayı türü dizisi atayabilirsiniz, ancak daha sonra bu diziyi depolamanızdan daha fazla bellek ayırabilirsiniz. Bunu önlemek için dtype
seçeneği açık olarak ayarlayabilirsiniz read_csv
. Dizi öğelerini gerçekte 8 bit tamsayı ( np.int8
veya np.uint8
) ile sığdırabileceğiniz uzun tamsayı olarak saklamak istemezsiniz .
Aşağıdaki dtype haritasını inceleyin.
Kaynak: https://pbpython.com/pandas_dtypes.html
dtype
Parametreyi panda yöntemlerinde parametre olarak read
{column: type} gibi belirtildiği gibi geçirebilirsiniz .
import numpy as np
import pandas as pd
df_dtype = {
"column_1": int,
"column_2": str,
"column_3": np.int16,
"column_4": np.uint8,
...
"column_n": np.float32
}
df = pd.read_csv('path/to/file', dtype=df_dtype)
Seçenek 2: Parçalar tarafından okuyun
Verileri parçalar halinde okumak, bellekteki verilerin bir kısmına erişmenizi sağlar ve verilerinize önişleme uygulayabilir ve ham veriler yerine işlenmiş verileri koruyabilirsiniz. Bu seçeneği birincisi ile birleştirirseniz çok daha iyi olur, dtypes .
Burada bulabileceğiniz panda yemek kitabı bölümlerine dikkat çekmek istiyorum . Bu iki bölüme dikkat edin;
Seçenek 3: Dask
Dask, Dask'ın web sitesinde şu şekilde tanımlanan bir çerçevedir :
Dask, sevdiğiniz araçlar için ölçekte performans sağlayan analitik için gelişmiş paralellik sağlar
Pandaların ulaşamayacağı gerekli parçaları kapsayacak şekilde doğdu. Dask, dağıtılmış bir şekilde işleyerek çok daha fazla veri erişimine izin veren güçlü bir çerçevedir.
Verilerinizi bir bütün olarak önişlemek için dask'ı kullanabilirsiniz, Dask parçalama kısmına bakar, bu nedenle pandaların aksine sadece işlem adımlarınızı tanımlayabilir ve Dask'ın işi yapmasına izin verebilirsiniz. Açıkça tarafından itilir önce Dask hesaplamaları geçerli değildir compute
ve / veya persist
(cevaba bakınız burada farkı).
Diğer Yardımlar (Fikirler)
- Veriler için tasarlanmış ETL akışı. Ham verilerden sadece gerekli olanı tutmak.
- İlk olarak, Dast veya PySpark gibi çerçevelerle tüm verilere ETL uygulayın ve işlenen verileri dışa aktarın.
- Ardından, işlenen verilerin bir bütün olarak belleğe sığabileceğine bakın.
- RAM'inizi artırmayı düşünün.
- Bu verilerle bir bulut platformunda çalışmayı düşünün.