{"id":4227,"date":"2026-02-08T15:06:10","date_gmt":"2026-02-08T13:06:10","guid":{"rendered":"https:\/\/webanalyst.ro\/?p=4227"},"modified":"2026-02-08T15:06:10","modified_gmt":"2026-02-08T13:06:10","slug":"pandas3","status":"publish","type":"post","link":"https:\/\/webanalyst.ro\/blog\/2026\/pandas3\/","title":{"rendered":"pandas 3.0.0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">La sf\u00e2r\u0219itul lunii ianuarie s-a lansat <strong>pandas 3.0.0<\/strong>, care a venit cu func\u021bionalit\u0103\u021bi majore \u00een ecosistemul pentru <strong>analiza datelor \u00een Python<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00cen urm\u0103 cu aproximativ trei ani scriam despre <a href=\"https:\/\/webanalyst.ro\/blog\/2023\/pandas-2-0-0\/\" target=\"_blank\" rel=\"noreferrer noopener\">lansarea pandas 2.0.0<\/a>, care era considerat\u0103 cea mai important\u0103 actualizare din ultimii 15 ani. \u00cen prezent, avem a treia versiune major\u0103 de pandas, iar unii spun c\u0103 aceasta este o actualizare \u0219i mai mare.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"600\" src=\"https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2026\/02\/pandas3.jpg\" alt=\"\" class=\"wp-image-4229\" srcset=\"https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2026\/02\/pandas3.jpg 1200w, https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2026\/02\/pandas3-300x150.jpg 300w, https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2026\/02\/pandas3-150x75.jpg 150w, https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2026\/02\/pandas3-768x384.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>O s\u0103 vedem \u00een continuarea articolului vom vedea argumentele, pentru c\u0103 voi descrie principalele func\u021bionalit\u0103\u021bi aduse de ultima versiune.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">PyArrow ca backend implicit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">pandas 1.x era construit pe funda\u021bia NumPy, care a fost creat ini\u021bial pentru calcule matematice \u0219i matriceale. Odat\u0103 cu lansarea versiunii 2.0, scriam c\u0103 datele nu vor mai fi reprezentate prin NumPy, ca \u00een versiunile anterioare, ci prin Apache Arrow.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cea mai mare schimbare \u00een versiunea 3.0<\/strong> este trecerea la <strong>PyArrow<\/strong> ca motor principal pentru stocarea datelor. <strong>PyArrow<\/strong> este biblioteca de Python care serve\u0219te drept interfa\u021b\u0103 pentru <strong>Apache Arrow<\/strong>, un framework revolu\u021bionar conceput pentru a accelera analiza datelor. De asemenea, PyArrow a fost proiectat special pentru tabele de date (<em>DataFrames<\/em>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Acest lucru vine cu c\u00e2teva avantaje pentru cei care trec la pandas 3.0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Performan\u021b\u0103<\/strong> &#8211; Opera\u021biunile pe string-uri \u0219i manipularea datelor lips\u0103 (<code>NA<\/code>) sunt mult mai rapide<\/li>\n\n\n\n<li><strong>Eficien\u021ba memoriei<\/strong> &#8211; PyArrow permite o gestionare mai bun\u0103 a memoriei, reduc\u00e2nd amprenta digital\u0103 a seturilor de date masive<\/li>\n\n\n\n<li><strong>Interoperabilitate<\/strong> &#8211; Faciliteaz\u0103 schimbul de date cu alte instrumente (precum Apache Spark sau Ray) f\u0103r\u0103 conversii costisitoare<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Copy-on-Write (CoW) devine standard<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cine a lucrat p\u00e2n\u0103 acum \u00een pandas s-a lovit de <code>SettingWithCopyWarning<\/code>. Aceasta pare o eroare, dar \u00een realitate este un avertisment pe care Python \u00eel transmite pentru a indica faptul c\u0103 datele e posibil s\u0103 nu se fi modifica a\u0219a cum se a\u0219tepta utilizatorul.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00cen general, \u00een pandas putem vedea datele originale (<em>View<\/em>) sau datele copiate (<em>Copy<\/em>). C\u00e2nd facem anumite schimb\u0103ri, e posibil ca acestea s\u0103 fie \u00eenregistrate doar \u00een copie \u0219i s\u0103 se piard\u0103 atunci c\u00e2nd \u00eenchidem sesiunea.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cu pandas 3.0, originalul r\u0103m\u00e2ne intact p\u00e2n\u0103 \u00een momentul \u00een care i se cere implicit o modificare a acestuia!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Suport pentru rezolu\u021bii multiple de date \u0219i ore<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e2n\u0103 acum, pandas era \u201eprizonierul\u201d nanosecundelor. Orice dat\u0103 calendaristic\u0103 trebuia stocat\u0103 la nivel de nanosecund\u0103, ceea ce limita intervalul de timp pe care \u00eel puteai reprezenta (aproximativ \u00eentre anii 1677 \u0219i 2262).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Din 3.0, putem folosi rezolu\u021bii de <em>datetime<\/em> \u00een secunde (<code>s<\/code>), milisecunde (<code>ms<\/code>) sau chiar microsecunde (<code>us<\/code>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sintax\u0103 nou\u0103 pentru <code>pd.col()<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e2n\u0103 acum, pentru a face opera\u021biuni \u00een lan\u021b (<em>method chaining<\/em>), unde aveai nevoie s\u0103 te referi la o coloan\u0103 creat\u0103 chiar \u00een acel lan\u021b, erai obligat s\u0103 folose\u0219ti func\u021bii <code>lambda<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>pd.col(nume_coloana)<\/code> creeaz\u0103 un obiect &#8222;\u00eent\u00e2rziat&#8221; (<em>deferred object<\/em>). Acesta nu con\u021bine datele propriu-zise \u00een momentul scrierii, ci este o instruc\u021biune care \u00eei spune lui pandas ca atunci c\u00e2nd va executa respectivul cod, s\u0103 caute coloana cu numele respectiv \u00een <em>DataFrame<\/em>-ul curent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Astfel, nu mai avem nevoie s\u0103 folosim func\u021biile de tip <em>lambda<\/em>, iar filtrarea va fi mai elegant\u0103.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Noua sintax\u0103 este ideal de folosit \u00een cazul <strong>Method Chaining<\/strong>, adic\u0103 atunci c\u00e2nd legi mai multe opera\u021biuni cu punct, de exemplu <code>.assign().groupby().filter()<\/code>. Variabilele intermediare nu vor mai fi salvate, av\u00e2nd direct rezultatul final.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Consisten\u021b\u0103 \u00een gestionarea valorilor nule<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Istoric, pandas avea o problem\u0103 dac\u0103 ap\u0103rea o singur\u0103 valoare lips\u0103 \u00eentr-o coloan\u0103 de numere \u00eentregi (<code>int<\/code>) \u0219i transforma toat\u0103 coloana \u00een numere cu virgul\u0103 (<code>float<\/code>), pentru a putea folosi <code>NaN<\/code><br>(<em>Not a Number<\/em>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prin integrarea mai profund\u0103 a tipurilor care accept\u0103 valori nule (<em>nullable<\/em>) \u00een pandas 3.0 (cum este <code>Int64<\/code> cu &#8222;I&#8221; mare sau noile tipuri Arrow), o coloan\u0103 de \u00eentregi <strong>r\u0103m\u00e2ne de tip \u00eentreg<\/strong> chiar dac\u0103 are valori lips\u0103.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Interoperabilitate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pandas 3.0 ader\u0103 mult mai strict la standardele comunit\u0103\u021bii Python Data API, prin <em>Dataframe Interchange Protocol<\/em>. Acum se pot converti obiecte \u00eentre pandas, <strong>Polars<\/strong>, <strong>cuDF<\/strong> (GPU) sau <strong>PyTorch<\/strong> mult mai u\u0219or \u0219i, de cele mai multe ori, f\u0103r\u0103 a copia datele \u00een memorie (<em>zero-copy<\/em>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Astfel, dac\u0103 exist\u0103 o parte din workflow \u00een pandas, datele pot fi trecute cu u\u0219urin\u021b\u0103 c\u0103tre un model de Machine Learning \u00een biblioteca <em>PyTorch<\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Optimiz\u0103ri masive la agregarea datelor<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Datorit\u0103 noului backend, opera\u021biunile de agregare (<code>groupby<\/code>) \u0219i combinare (<code>merge<\/code>\/<code>join<\/code>) au fost rescrise par\u021bial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Algoritmii de tip &#8222;hash join&#8221; sunt acum optimiza\u021bi pentru structura Arrow, lucru care va duce la o reducere a timpului de execu\u021bie \u00een special c\u00e2nd se fac <em>join<\/em>-uri \u00eentre tabele mari pe coloane de tip text sau categorice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00cen final, versiunea 3.0 a eliminat foarte multe func\u021bii \u0219i argumente care erau marcate ca &#8222;deprecated&#8221; de ani de zile, de exemplu metoda <code>.append()<\/code>, care a fost \u00eenlocuit\u0103 de <code>pd.concat()<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Actualizarea la pandas 3.0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Luna aceasta este programat s\u0103 apar\u0103 <strong>pandas 3.0.1<\/strong>, care va corecta lucrurile care nu func\u021bioneaz\u0103 cum trebuie \u00een pandas 3.0.0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pentru a instala ultima versiune din pandas 3.0 din PyPI, este suficient\u0103 o singur\u0103 linie de cod:<br><code>python -m pip install --upgrade pandas==3.0.*<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A\u0219a cum am v\u0103zut mai sus, avem mai multe beneficii s\u0103 facem actualizarea la pachetul <strong>pandas 3.0<\/strong>, acesta reprezent\u00e2nd un salt major \u00een ecosistemul de analiz\u0103 a datelor din Python, pun\u00e2nd un accent major pe performan\u021b\u0103 \u0219i pe modernizarea structurilor interne.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La sf\u00e2r\u0219itul lunii ianuarie s-a lansat pandas 3.0.0, care a venit cu func\u021bionalit\u0103\u021bi majore \u00een ecosistemul pentru analiza datelor \u00een Python. \u00cen urm\u0103 cu aproximativ trei ani scriam despre lansarea pandas 2.0.0, care era considerat\u0103 cea mai important\u0103 actualizare din ultimii 15 ani. \u00cen prezent, avem a treia versiune major\u0103 de pandas, iar unii spun [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3388,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[990,946],"class_list":["post-4227","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical","tag-pandas","tag-python"],"_links":{"self":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts\/4227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/comments?post=4227"}],"version-history":[{"count":3,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts\/4227\/revisions"}],"predecessor-version":[{"id":4231,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts\/4227\/revisions\/4231"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/media\/3388"}],"wp:attachment":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/media?parent=4227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/categories?post=4227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/tags?post=4227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}