Mengonversi queryset pada values_list () akan lebih menghemat memori daripada pada values () secara langsung. Karena metode values () mengembalikan queryset dari daftar dict (key: value pairs), values_list () hanya mengembalikan daftar tuple (data murni). Ini akan menghemat sekitar 50% memori, hanya perlu mengatur informasi kolom ketika Anda memanggil pd.DataFrame ().
Metode 1:
queryset = models.xxx.objects.values ("A", "B", "C", "D")
df = pd.DataFrame (list (queryset)) ## menghabiskan banyak memori
#df = pd.DataFrame.from_records (queryset) ## berfungsi tetapi tidak banyak perubahan pada penggunaan memori
Metode 2:
queryset = models.xxx.objects.values_list ("A", "B", "C", "D")
df = pd.DataFrame (list (queryset), kolom = ["A", "B", "C", "D"]) ## ini akan menghemat 50% memori
#df = pd.DataFrame.from_records (queryset, kolom = ["A", "B", "C", "D"]) ## Tidak berfungsi. Crash dengan datatype is queryset not list.
Saya menguji ini pada proyek saya dengan> 1 juta baris data, memori puncak berkurang dari 2G menjadi 1G.