Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Anda Harus Mengelak Pilihan `low_memory` dan Tentukan Djenis Dengan Eksplisit Apabila Menggunakan Panda `read_csv`?
Apabila menggunakan panda untuk mengimport fail CSV, pengguna mungkin menghadapi ralat berkenaan jenis data campuran dalam lajur tertentu , menggesa cadangan untuk menentukan pilihan dtype atau tetapkan low_memory kepada False. Untuk menyelidiki perkara ini, kita mesti memahami kepentingan kedua-dua parameter.
Pilihan low_memory direka untuk menjimatkan memori semasa pengingesan data tetapi tidak lagi dinasihatkan untuk digunakan kerana ia tidak mempunyai tujuan praktikal. Sebabnya ialah meneka jenis data untuk setiap lajur dalam set data adalah intensif memori. Pandas cuba untuk menentukan dtype yang sesuai dengan memeriksa setiap data lajur. Walau bagaimanapun, proses ini memerlukan keseluruhan fail dibaca untuk menetapkan djenis yang betul, yang boleh menjadi tidak cekap untuk set data yang lebih besar.
Secara lalai, Pandas membuat kesimpulan dtype untuk setiap lajur selepas membaca keseluruhan fail. Pendekatan ini menimbulkan cabaran apabila berurusan dengan lajur yang mengandungi data bercampur, di mana dtype tidak dapat ditentukan sehingga semua nilai telah diproses. Sebagai contoh, lajur berlabel "user_id" mungkin hanya terdiri daripada nilai berangka tetapi tidak boleh diberikan int dtype sehingga keseluruhan lajur dibaca. Ini kerana Pandas tidak boleh menganggap bahawa semua nilai akan menjadi berangka tanpa mengambil risiko kemungkinan perlu menukar dtype pada peringkat kemudian.
Untuk mengelakkan pengehadan meneka dtype, adalah penting untuk menentukan secara eksplisit dtype untuk setiap lajur menggunakan parameter dtype. Pendekatan ini menghapuskan keperluan untuk Pandas menganalisis keseluruhan fail dan segera menetapkan dtype yang sesuai berdasarkan jenis yang ditentukan.
Pertimbangkan contoh fail CSV dengan lajur bernama "user_id" yang mengandungi hanya nilai berangka. Dengan menambahkan "dtype={'user_id': int}" pada panggilan pd.read_csv(), Pandas akan mengenali lajur sebagai integer dari permulaan proses import.
Panda menyokong julat lengkap djenis, termasuk jenis data numpy (cth., float, int, bool) dan jenis khusus Pandas (cth., 'kategori', 'Sparse'). Senarai lengkap dtypes yang tersedia dalam Pandas boleh didapati dalam rujukan dtype: Pandas dtype reference
Menetapkan dtype kepada 'objek' akan menyekat amaran jenis data campuran tetapi tidak meningkatkan kecekapan ingatan. Menetapkan dtype kepada 'unicode' adalah tidak berkesan kerana Numpy mewakili unicode sebagai 'objek'.
Menggunakan penukar boleh membantu mengendalikan data yang tidak mematuhi, seperti nilai rentetan dalam lajur yang ditentukan sebagai integer. Walau bagaimanapun, penukar boleh menjadi mahal dari segi pengiraan dan harus digunakan dengan berhati-hati.
Walaupun pilihan low_memory tidak lagi disyorkan, menyatakan djenis yang sesuai adalah penting untuk pemprosesan data yang cekap dan tepat. Dengan mengelak meneka dtype dan mentakrifkan jenis data yang betul terlebih dahulu, pengguna boleh mengoptimumkan penggunaan memori dan meningkatkan prestasi kod Pandas mereka.
Atas ialah kandungan terperinci Mengapa Anda Harus Mengelak Pilihan `low_memory` dan Tentukan Djenis Dengan Eksplisit Apabila Menggunakan Panda `read_csv`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!