Jadual Kandungan
1. Jenis kategori
2. Penukaran baris-lajur
3 apply() sangat lambat
Lebih pantas
Pandaralllel
4 Nilai null, int, Int64
5. Csv, mampatan atau parket? Parket akan mengekalkan jenis data, jadi tidak perlu menentukan djenis semasa membaca data. Fail parket dimampatkan menggunakan snappy secara lalai, jadi ia mengambil sedikit ruang cakera. Di bawah anda boleh melihat beberapa perbandingan
Mengira frekuensi relatif, termasuk mendapatkan nilai mutlak, mengira dan membahagikan dengan jumlah adalah rumit, tetapi menggunakan value_counts, tugas ini boleh dicapai dengan lebih mudah dan Kaedah ini menyediakan pilihan untuk memasukkan atau mengecualikan nilai nol.
Panda adalah satu benang, tetapi Modin boleh mempercepatkan aliran kerja anda dengan menskalakan panda Ia berfungsi dengan baik terutamanya pada set data yang lebih besar di mana panda boleh menjadi sangat perlahan atau penggunaan memori yang berlebihan membawa kepada OOM.
9、读写剪贴板
10、数组列分成多列
总结
Rumah pembangunan bahagian belakang Tutorial Python Sepuluh teknik pemprosesan data alternatif untuk Panda

Sepuluh teknik pemprosesan data alternatif untuk Panda

Apr 15, 2023 am 09:19 AM
Pemprosesan data Kemahiran pandas

Teknik yang disusun dalam artikel ini berbeza daripada teknik biasa yang disusun dalam 10 Panda sebelum ini Anda mungkin tidak kerap menggunakannya, tetapi kadangkala apabila anda menghadapi beberapa masalah yang sangat sukar, teknik ini boleh membantu anda Menyelesaikan beberapa masalah yang jarang berlaku.

Sepuluh teknik pemprosesan data alternatif untuk Panda

1. Jenis kategori

Secara lalai, lajur dengan bilangan pilihan yang terhad akan diberikan jenis objek. Tetapi ia bukan pilihan yang cekap dari segi ingatan. Kita boleh mengindeks lajur ini dan hanya menggunakan rujukan kepada objek dan bukan nilai sebenar. Pandas menyediakan Dtype yang dipanggil Categorical untuk menyelesaikan masalah ini.

Sebagai contoh, set data yang besar dengan laluan imej. Setiap baris mempunyai tiga lajur: sauh, positif dan negatif.

Menggunakan Categorical untuk lajur kategori boleh mengurangkan penggunaan memori dengan ketara.

# raw data
 +----------+------------------------+
 |class |filename|
 +----------+------------------------+
 | Bathroom | Bathroombath_1.jpg|
 | Bathroom | Bathroombath_100.jpg|
 | Bathroom | Bathroombath_1003.jpg |
 | Bathroom | Bathroombath_1004.jpg |
 | Bathroom | Bathroombath_1005.jpg |
 +----------+------------------------+
 
 # target
 +------------------------+------------------------+----------------------------+
 | anchor |positive|negative|
 +------------------------+------------------------+----------------------------+
 | Bathroombath_1.jpg| Bathroombath_100.jpg| Dinningdin_540.jpg|
 | Bathroombath_100.jpg| Bathroombath_1003.jpg | Dinningdin_1593.jpg |
 | Bathroombath_1003.jpg | Bathroombath_1004.jpg | Bedroombed_329.jpg|
 | Bathroombath_1004.jpg | Bathroombath_1005.jpg | Livingroomliving_1030.jpg |
 | Bathroombath_1005.jpg | Bathroombath_1007.jpg | Bedroombed_1240.jpg |
 +------------------------+------------------------+----------------------------+
Salin selepas log masuk

Nilai lajur nama fail akan disalin dengan kerap. Oleh itu, penggunaan ingatan boleh dikurangkan dengan menggunakan Kategori.

Mari baca set data sasaran dan lihat perbezaan dalam ingatan:

triplets.info(memory_usage="deep")
 
 # Column Non-Null Count Dtype
 # --- ------ -------------- -----
 # 0 anchor 525000 non-null category
 # 1 positive 525000 non-null category
 # 2 negative 525000 non-null category
 # dtypes: category(3)
 # memory usage: 4.6 MB
 
 # without categories
 triplets_raw.info(memory_usage="deep")
 
 # Column Non-Null Count Dtype
 # --- ------ -------------- -----
 # 0 anchor 525000 non-null object
 # 1 positive 525000 non-null object
 # 2 negative 525000 non-null object
 # dtypes: object(3)
 # memory usage: 118.1 MB
Salin selepas log masuk

Perbezaan sangat besar dan berkembang secara tidak linear apabila bilangan ulangan meningkat.

2. Penukaran baris-lajur

Kami sering menghadapi masalah penukaran baris-lajur dalam sql, kadangkala Panda juga memerlukannya. census_start .csv file:

Sepuluh teknik pemprosesan data alternatif untuk Panda

Seperti yang anda lihat, ini disimpan mengikut tahun Adalah lebih baik jika terdapat tahun lajur dan pct_bb, dan setiap baris mempunyai yang sepadan nilai.

cols = sorted([col for col in original_df.columns 
 if col.startswith("pct_bb")])
 df = original_df[(["cfips"] + cols)]
 df = df.melt(id_vars="cfips",
value_vars=cols,
var_name="year",
value_name="feature").sort_values(by=["cfips", "year"])
Salin selepas log masuk

Lihat hasilnya, adakah ia lebih baik:

Sepuluh teknik pemprosesan data alternatif untuk Panda

3 apply() sangat lambat

Seperti yang kami perkenalkan kali lepas, sebaiknya jangan gunakan kaedah ini kerana kaedah ini berulang melalui setiap baris dan memanggil kaedah yang ditentukan. Tetapi jika kita tidak mempunyai pilihan lain, adakah cara untuk meningkatkan kelajuan?

Anda boleh menggunakan pakej seperti lebih pantas atau pandarallew untuk menyelaraskan proses.

Lebih pantas

import pandas as pd
 import swifter
 
 def target_function(row):
 return row * 10
 
 def traditional_way(data):
 data['out'] = data['in'].apply(target_function)
 
 def swifter_way(data):
 data['out'] = data['in'].swifter.apply(target_function)
Salin selepas log masuk

Pandaralllel

import pandas as pd
 from pandarallel import pandarallel
 
 def target_function(row):
 return row * 10
 
 def traditional_way(data):
 data['out'] = data['in'].apply(target_function)
 
 def pandarallel_way(data):
 pandarallel.initialize()
 data['out'] = data['in'].parallel_apply(target_function)
Salin selepas log masuk

Melalui multi-threading, kelajuan pengiraan boleh dipertingkatkan terbaik untuk menggunakan dask atau pyspark

4 Nilai null, int, Int64

Jenis data integer standard tidak menyokong nilai null, jadi ia akan ditukar secara automatik kepada nombor titik terapung. Jadi jika data anda memerlukan nilai nol dalam medan integer, pertimbangkan untuk menggunakan jenis data Int64 kerana ia akan menggunakan panda.NA untuk mewakili nilai nol.

5. Csv, mampatan atau parket? Parket akan mengekalkan jenis data, jadi tidak perlu menentukan djenis semasa membaca data. Fail parket dimampatkan menggunakan snappy secara lalai, jadi ia mengambil sedikit ruang cakera. Di bawah anda boleh melihat beberapa perbandingan

Membaca parket memerlukan pakej tambahan, seperti pyarrow atau fastparket. chatgpt mengatakan bahawa pyarrow lebih cepat daripada fastparquet, tetapi apabila saya menguji pada set data yang kecil, fastparquet lebih cepat daripada pyarrow, tetapi disyorkan untuk menggunakan pyarrow di sini, kerana panda 2.0 juga menggunakan ini secara lalai.
|file|size |
 +------------------------+---------+
 | triplets_525k.csv| 38.4 MB |
 | triplets_525k.csv.gzip |4.3 MB |
 | triplets_525k.csv.zip|4.5 MB |
 | triplets_525k.parquet|1.9 MB |
 +------------------------+---------+
Salin selepas log masuk

6. value_counts ()

Mengira frekuensi relatif, termasuk mendapatkan nilai mutlak, mengira dan membahagikan dengan jumlah adalah rumit, tetapi menggunakan value_counts, tugas ini boleh dicapai dengan lebih mudah dan Kaedah ini menyediakan pilihan untuk memasukkan atau mengecualikan nilai nol.

df = pd.DataFrame({"a": [1, 2, None], "b": [4., 5.1, 14.02]})
 df["a"] = df["a"].astype("Int64")
 print(df.info())
 print(df["a"].value_counts(normalize=True, dropna=False),
df["a"].value_counts(normalize=True, dropna=True), sep="nn")
Salin selepas log masuk

Sepuluh teknik pemprosesan data alternatif untuk Panda

Bukankah ini lebih mudah

7 sekarang Masih dalam fasa ujian.

Panda adalah satu benang, tetapi Modin boleh mempercepatkan aliran kerja anda dengan menskalakan panda Ia berfungsi dengan baik terutamanya pada set data yang lebih besar di mana panda boleh menjadi sangat perlahan atau penggunaan memori yang berlebihan membawa kepada OOM.

Berikut ialah gambarajah seni bina laman web rasmi modin Jika anda berminat, kajinya:

!pip install modin[all]
 
 import modin.pandas as pd
 df = pd.read_csv("my_dataset.csv")
Salin selepas log masuk

8. . extract()Sepuluh teknik pemprosesan data alternatif untuk Panda

Jika anda sering menemui data separa berstruktur yang kompleks dan perlu memisahkan lajur individu daripadanya, anda boleh menggunakan kaedah ini:

import pandas as pd
 
 regex = (r'(?P<title>[A-Za-z's]+),'
r'(?P<author>[A-Za-zs']+),'
r'(?P<isbn>[d-]+),'
r'(?P<year>d{4}),'
r'(?P<publisher>.+)')
 addr = pd.Series([
 "The Lost City of Amara,Olivia Garcia,978-1-234567-89-0,2023,HarperCollins",
 "The Alchemist's Daughter,Maxwell Greene,978-0-987654-32-1,2022,Penguin Random House",
 "The Last Voyage of the HMS Endeavour,Jessica Kim,978-5-432109-87-6,2021,Simon & Schuster",
 "The Ghosts of Summer House,Isabella Lee,978-3-456789-12-3,2000,Macmillan Publishers",
 "The Secret of the Blackthorn Manor,Emma Chen,978-9-876543-21-0,2023,Random House Children's Books"
])
 addr.str.extract(regex)
Salin selepas log masuk

9、读写剪贴板

这个技巧有人一次也用不到,但是有人可能就是需要,比如:在分析中包含PDF文件中的表格时。通常的方法是复制数据,粘贴到Excel中,导出到csv文件中,然后导入Pandas。但是,这里有一个更简单的解决方案:pd.read_clipboard()。我们所需要做的就是复制所需的数据并执行一个方法。

有读就可以写,所以还可以使用to_clipboard()方法导出到剪贴板。

但是要记住,这里的剪贴板是你运行python/jupyter主机的剪切板,并不可能跨主机粘贴,一定不要搞混了。

10、数组列分成多列

假设我们有这样一个数据集,这是一个相当典型的情况:

import pandas as pd
 df = pd.DataFrame({"a": [1, 2, 3],
"b": [4, 5, 6],
"category": [["foo", "bar"], ["foo"], ["qux"]]})
 
 # let's increase the number of rows in a dataframe
 df = pd.concat([df]*10000, ignore_index=True)
Salin selepas log masuk

Sepuluh teknik pemprosesan data alternatif untuk Panda

我们想将category分成多列显示,例如下面的

Sepuluh teknik pemprosesan data alternatif untuk Panda

先看看最慢的apply:

def dummies_series_apply(df):
return df.join(df['category'].apply(pd.Series) 
.stack() 
.str.get_dummies() 
.groupby(level=0) 
.sum()) 
.drop("category", axis=1)
 %timeit dummies_series_apply(df.copy())
 #5.96 s ± 66.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Salin selepas log masuk

sklearn的MultiLabelBinarizer

from sklearn.preprocessing import MultiLabelBinarizer
 def sklearn_mlb(df):
mlb = MultiLabelBinarizer()
return df.join(pd.DataFrame(mlb.fit_transform(df['category']), columns=mlb.classes_)) 
.drop("category", axis=1)
 %timeit sklearn_mlb(df.copy())
 #35.1 ms ± 1.31 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Salin selepas log masuk

是不是快了很多,我们还可以使用一般的向量化操作对其求和:

def dummies_vectorized(df):
return pd.get_dummies(df.explode("category"), prefix="cat") 
.groupby(["a", "b"]) 
.sum() 
.reset_index()
 %timeit dummies_vectorized(df.copy())
 #29.3 ms ± 1.22 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Salin selepas log masuk

Sepuluh teknik pemprosesan data alternatif untuk Panda

使用第一个方法(在StackOverflow上的回答中非常常见)会给出一个非常慢的结果。而其他两个优化的方法的时间是非常快速的。

总结

我希望每个人都能从这些技巧中学到一些新的东西。重要的是要记住尽可能使用向量化操作而不是apply()。此外,除了csv之外,还有其他有趣的存储数据集的方法。不要忘记使用分类数据类型,它可以节省大量内存。感谢阅读!

Atas ialah kandungan terperinci Sepuluh teknik pemprosesan data alternatif untuk Panda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perkongsian Petua Win11: Langkau Log Masuk Akaun Microsoft dengan Satu Helah Perkongsian Petua Win11: Langkau Log Masuk Akaun Microsoft dengan Satu Helah Mar 27, 2024 pm 02:57 PM

Perkongsian Petua Win11: Satu helah untuk melangkau log masuk akaun Microsoft Windows 11 ialah sistem pengendalian terkini yang dilancarkan oleh Microsoft, dengan gaya reka bentuk baharu dan banyak fungsi praktikal. Walau bagaimanapun, bagi sesetengah pengguna, perlu log masuk ke akaun Microsoft mereka setiap kali mereka boot sistem boleh menjadi agak menjengkelkan. Jika anda salah seorang daripada mereka, anda juga boleh mencuba petua berikut, yang akan membolehkan anda melangkau log masuk dengan akaun Microsoft dan memasuki antara muka desktop secara langsung. Pertama, kita perlu mencipta akaun tempatan dalam sistem untuk log masuk dan bukannya akaun Microsoft. Kelebihan melakukan ini ialah

Perkara yang mesti dimiliki oleh veteran: Petua dan langkah berjaga-jaga untuk * dan & dalam bahasa C Perkara yang mesti dimiliki oleh veteran: Petua dan langkah berjaga-jaga untuk * dan & dalam bahasa C Apr 04, 2024 am 08:21 AM

Dalam bahasa C, ia mewakili penunjuk, yang menyimpan alamat pembolehubah lain & mewakili pengendali alamat, yang mengembalikan alamat memori pembolehubah. Petua untuk menggunakan penunjuk termasuk mentakrifkan penunjuk, membatalkan rujukan dan memastikan bahawa penunjuk menunjuk ke alamat yang sah & termasuk mendapatkan alamat pembolehubah, dan mengembalikan alamat elemen pertama tatasusunan apabila mendapatkan alamat elemen tatasusunan; . Contoh praktikal yang menggambarkan penggunaan penunjuk dan pengendali alamat untuk membalikkan rentetan.

Apakah petua untuk orang baru membuat borang? Apakah petua untuk orang baru membuat borang? Mar 21, 2024 am 09:11 AM

Kami sering membuat dan mengedit jadual dalam excel, tetapi sebagai orang baru yang baru bersentuhan dengan perisian, cara menggunakan excel untuk mencipta jadual bukanlah semudah bagi kami. Di bawah, kami akan menjalankan beberapa latihan mengenai beberapa langkah penciptaan meja yang perlu dikuasai oleh pemula, iaitu pemula, Kami berharap ia akan membantu mereka yang memerlukan. Contoh borang untuk pemula ditunjukkan di bawah: Mari lihat cara melengkapkannya! 1. Terdapat dua kaedah untuk mencipta dokumen excel baharu. Anda boleh klik kanan tetikus pada lokasi kosong pada fail [Desktop] - [Baru] - [xls]. Anda juga boleh [Mula]-[Semua Program]-[Microsoft Office]-[Microsoft Excel 20**] 2. Dwiklik bekas baharu kami

Panduan Bermula VSCode: Mesti dibaca untuk pemula untuk menguasai kemahiran penggunaan dengan cepat! Panduan Bermula VSCode: Mesti dibaca untuk pemula untuk menguasai kemahiran penggunaan dengan cepat! Mar 26, 2024 am 08:21 AM

VSCode (Visual Studio Code) ialah editor kod sumber terbuka yang dibangunkan oleh Microsoft Ia mempunyai fungsi yang berkuasa dan sokongan pemalam yang kaya, menjadikannya salah satu alat pilihan untuk pembangun. Artikel ini akan menyediakan panduan pengenalan untuk pemula untuk membantu mereka menguasai kemahiran menggunakan VSCode dengan cepat. Dalam artikel ini, kami akan memperkenalkan cara memasang VSCode, operasi penyuntingan asas, kekunci pintasan, pemasangan pemalam, dsb., dan menyediakan contoh kod khusus kepada pembaca. 1. Pasang VSCode dahulu, kita perlu

Bagaimanakah Golang meningkatkan kecekapan pemprosesan data? Bagaimanakah Golang meningkatkan kecekapan pemprosesan data? May 08, 2024 pm 06:03 PM

Golang meningkatkan kecekapan pemprosesan data melalui konkurensi, pengurusan memori yang cekap, struktur data asli dan perpustakaan pihak ketiga yang kaya. Kelebihan khusus termasuk: Pemprosesan selari: Coroutine menyokong pelaksanaan berbilang tugas pada masa yang sama. Pengurusan memori yang cekap: Mekanisme kutipan sampah secara automatik menguruskan memori. Struktur data yang cekap: Struktur data seperti kepingan, peta dan saluran mengakses dan memproses data dengan pantas. Perpustakaan pihak ketiga: meliputi pelbagai perpustakaan pemprosesan data seperti fasthttp dan x/text.

Trik Win11 Didedahkan: Cara Memintas Log Masuk Akaun Microsoft Trik Win11 Didedahkan: Cara Memintas Log Masuk Akaun Microsoft Mar 27, 2024 pm 07:57 PM

Helah Win11 didedahkan: Cara memintas log masuk akaun Microsoft Baru-baru ini, Microsoft melancarkan sistem pengendalian baharu Windows11, yang telah menarik perhatian meluas. Berbanding dengan versi sebelumnya, Windows 11 telah membuat banyak pelarasan baharu dari segi reka bentuk antara muka dan penambahbaikan fungsi, tetapi ia juga telah menyebabkan beberapa kontroversi Perkara yang paling menarik perhatian ialah ia memaksa pengguna untuk log masuk ke sistem dengan akaun Microsoft . Bagi sesetengah pengguna, mereka mungkin lebih terbiasa log masuk dengan akaun tempatan dan tidak bersedia untuk mengikat maklumat peribadi mereka ke akaun Microsoft.

Kemahiran pengaturcaraan PHP: Bagaimana untuk melompat ke halaman web dalam masa 3 saat Kemahiran pengaturcaraan PHP: Bagaimana untuk melompat ke halaman web dalam masa 3 saat Mar 24, 2024 am 09:18 AM

Tajuk: Petua Pengaturcaraan PHP: Cara Melompat ke Halaman Web dalam masa 3 Saat Dalam pembangunan web, kita sering menghadapi situasi di mana kita perlu melompat ke halaman lain secara automatik dalam tempoh masa tertentu. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan teknik pengaturcaraan untuk melompat ke halaman dalam masa 3 saat, dan memberikan contoh kod khusus. Pertama sekali, prinsip asas lompat halaman direalisasikan melalui medan Lokasi dalam pengepala respons HTTP. Dengan menetapkan medan ini, penyemak imbas secara automatik boleh melompat ke halaman yang ditentukan. Di bawah ialah contoh mudah yang menunjukkan cara menggunakan P

Bagaimanakah keupayaan pemprosesan data dalam Laravel dan CodeIgniter dibandingkan? Bagaimanakah keupayaan pemprosesan data dalam Laravel dan CodeIgniter dibandingkan? Jun 01, 2024 pm 01:34 PM

Bandingkan keupayaan pemprosesan data Laravel dan CodeIgniter: ORM: Laravel menggunakan EloquentORM, yang menyediakan pemetaan hubungan kelas-objek, manakala CodeIgniter menggunakan ActiveRecord untuk mewakili model pangkalan data sebagai subkelas kelas PHP. Pembina pertanyaan: Laravel mempunyai API pertanyaan berantai yang fleksibel, manakala pembina pertanyaan CodeIgniter lebih ringkas dan berasaskan tatasusunan. Pengesahan data: Laravel menyediakan kelas Pengesah yang menyokong peraturan pengesahan tersuai, manakala CodeIgniter mempunyai kurang fungsi pengesahan terbina dalam dan memerlukan pengekodan manual peraturan tersuai. Kes praktikal: Contoh pendaftaran pengguna menunjukkan Lar

See all articles