Saya ingin membuat jawaban yang lebih komprehensif berdasarkan sebagian besar solusi potensial yang sudah disediakan. Saya juga ingin menunjukkan satu lagi bantuan potensial yang dapat membantu proses membaca.
Opsi 1: dtypes
"Dtypes" adalah parameter yang cukup kuat yang dapat Anda gunakan untuk mengurangi tekanan memori read
metode. Lihat ini dan ini jawaban . Panda, secara default, mencoba menyimpulkan dtipe data.
Mengacu pada struktur data, setiap data yang disimpan, alokasi memori dilakukan. Pada tingkat dasar lihat nilai-nilai di bawah ini (Tabel di bawah ini menggambarkan nilai-nilai untuk bahasa pemrograman C):
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
Lihat ini halaman untuk melihat kecocokan antara tipe NumPy dan C.
Katakanlah Anda memiliki array bilangan bulat digit . Anda dapat menetapkan secara teoritis dan praktis, katakanlah array dengan tipe integer 16-bit, tetapi Anda kemudian akan mengalokasikan lebih banyak memori daripada yang sebenarnya Anda perlukan untuk menyimpan array itu. Untuk mencegah hal ini, Anda dapat mengatur dtype
opsi pada read_csv
. Anda tidak ingin menyimpan item array sebagai integer panjang di mana sebenarnya Anda bisa memasangnya dengan integer 8-bit ( np.int8
ataunp.uint8
).
Amati dtype peta berikut.
Sumber: https://pbpython.com/pandas_dtypes.html
Anda dapat melewatkan dtype
parameter sebagai parameter pada metode panda seperti dict pada read
like {kolom: type}.
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)
Opsi 2: Baca oleh Potongan-potongan
Membaca data dalam potongan memungkinkan Anda untuk mengakses bagian dari data dalam memori, dan Anda dapat menerapkan preprocessing pada data Anda dan menyimpan data yang diproses daripada data mentah. Akan jauh lebih baik jika Anda menggabungkan opsi ini dengan yang pertama, dtypes .
Saya ingin menunjukkan bagian buku masak panda untuk proses itu, di mana Anda dapat menemukannya di sini . Perhatikan dua bagian di sana;
Opsi 3: Dask
Dask adalah kerangka kerja yang didefinisikan dalam situs web Dask sebagai:
Dask menyediakan paralelisme canggih untuk analitik, memungkinkan kinerja pada skala untuk alat yang Anda sukai
Ia dilahirkan untuk menutupi bagian-bagian penting yang tidak dapat dijangkau oleh panda. Dask adalah kerangka kerja yang kuat yang memungkinkan Anda lebih banyak mengakses data dengan memprosesnya secara terdistribusi.
Anda dapat menggunakan dask untuk memproses data Anda secara keseluruhan, Dask menangani bagian chunking, jadi tidak seperti panda, Anda bisa menentukan langkah-langkah pemrosesan Anda dan membiarkan Dask melakukan pekerjaannya. Dask tidak menerapkan perhitungan sebelum secara eksplisit didorong oleh compute
dan / atau persist
(lihat jawabannya di sini untuk perbedaannya).
Bantuan Lainnya (Gagasan)
- Aliran ETL dirancang untuk data. Menyimpan hanya apa yang dibutuhkan dari data mentah.
- Pertama, terapkan ETL ke seluruh data dengan kerangka kerja seperti Dask atau PySpark, dan ekspor data yang diproses.
- Kemudian lihat apakah data yang diproses bisa masuk dalam memori secara keseluruhan.
- Pertimbangkan meningkatkan RAM Anda.
- Pertimbangkan untuk bekerja dengan data itu di platform cloud.