Pandas Cuțitul armatei elvețiene pentru datele dvs., partea 1

Pandas este un instrument de analiză uimitor de date pentru Python. Este proiectat să funcționeze pe date relaționale sau etichetate și vă oferă instrumente de feliere și zaruri după cum doriți. 

În acest tutorial în două părți, veți afla despre structurile de date fundamentale ale Pandas: seria și cadrul de date. De asemenea, veți învăța cum să selectați date, să rezolvați valorile lipsă, să vă manipulați datele, să vă îmbinați datele, să grupați datele, să lucrați cu serii de timp și chiar să compilați date.

Instalare

Pentru a instala, doar pip instalează panda. Acesta va avea grijă de instalarea numpy prea dacă nu aveți instalat.

Serie

Seriile Pandas sunt tipărite și etichetate cu matrice 1-D. Aceasta înseamnă că fiecare element poate fi accesat de etichetă în plus față de indexul său.

Iată o serie de numere întregi în care etichetele sunt cifre romane. Puteți să indexați și să tăiați folosind etichetele sau indicii întregi. Spre deosebire de licitarea în mod obișnuit a listei Python, atunci când se utilizează etichete, este inclus și ultimul element!

>>> s = pd.Series (np.arange (1,5), ['I', 'II', 'III', 'IV', 'V')) >>> s [0] 1 >>> s ['II': 'V'] II 2 III 3 IV 4 V 5 >>> s [1: 5] II 2 III 3 IV 4 V 5 

Dacă nu furnizați un index, atunci se creează automat un indice întreg cu valoare zero:

>>> s = pd.Series ((50, 7, 88, 9)) >>> s 0 50 1 7 2 88 3 9

Acum, iată un mic secret pentru tine. Serile de serii Pandas sunt înfășurați în jurul câmpurilor lui Numpy.

>>> s.values ​​array ([50, 7, 88, 9]) >>> tip (s.value)  

Spre deosebire de listele de Python sau de matricele ample, operațiile pe serii se aliniază pe index. Dacă indicele nu se potrivește atunci unirea de indicii va fi folosită cu valori lipsă, după caz. Iată câteva exemple care utilizează dicte ca date, astfel încât cheile devin indexul seriei:

>>> s1 = pd.Series (dict (a = 1, b = 2, c = 3)) >>> s2 = )) >>> s1 + s2 a 5.0 b 7.0 c 9.0 d NaN >>> s1 [1:] * s2 [: - 1] a NaN b 10.0 c 18.0

Rame de date

Cadrele de date sunt structura de date primare a pandelor. Ele reprezintă tabele de date în care fiecare coloană este o serie. Ramele de date au și un index, care servește ca etichetă de rând. Un cadru de date are, de asemenea, etichete de coloană. Iată cum puteți declara un cadru de date folosind un dicționar. 

>>> df = pd.DataFrame (dict (a = [1,2,3], b = [4,5,6], c = pd.Timestamp ('20170902'), d = roșu, verde, albastru)))) >>> df abcd 0 1 4 2017-09-02 roșu 1 2 5 2017-09-02 verde 2 3 6 2017-09-02 albastru

Rețineți că un indice întreg (eticheta rând) a fost creat automat. Puteți, bineînțeles, să vă furnizați propriul dvs. index:

>>> df.index = ('I II III'.split ()) >>> df a b c d I 1 4 2017-09-02 roșu II 2 5 2017-09-02 verde III 3 6 2017-09-02 albastru

Importul și exportul de date

Cadrele de date pot fi construite dintr-o varietate foarte largă de surse:

  • dict de 1-D ndarrays, liste, dicts, sau serie
  • 2-D numpy.ndarray
  • structurat sau înregistrat ndarray
  • un alt DataFrame

De asemenea, puteți importa sau încărca date din mai multe formate de fișiere și baze de date, cum ar fi:

  • CSV
  • excela
  • HTML
  • HDFStore 
  • SQL

Iată cum puteți citi un fișier CSV:

data.csv -------- I, 1,4,2017-09-02, roșu II, 2,5,2017-09-02, verde III, 3,6,2017-09-02, albastru >>> pd.read_csv ('data.csv') I 1 4 2017-09-02 roșu 0 II 2 5 2017-09-02 verde 1 III 3 6 2017-09-02 albastru 

Aici este lista completă a read_functions ():

>>> read_functions = [a pentru a în dir (pd) dacă a.startswith ('read_')] >>> print ('\ n'.join (read_functions)) read_clipboard read_csv read_excel read_feather read_fwf read_gbq read_hdf read_html read_json read_msgpack read_pickle read_sas read_sql read_sql_query read_sql_table read_stata read_table 

Există metode corespunzătoare pe obiectul cadrului de date pentru exportul datelor în mai multe formate și baze de date. Iată cum exportați în json și msgpack:

>>> df.to_json () '"a": "I": 1, "II": 2, "III": 3, "b" , "III": 6, "c": "I": 1504310400000, "II": 1504310400000, "III": 1504310400000 verde "," III ":" albastru " '>>> df.to_msgpack () b' \ x84 \ xa3typ \ xadblock_manager \ xa5klass \ xa9DataFrame \ xa4axes \ x92 \ x86 \ xa3typ \ xa5index \ xa5klass \ xa5Index \ xc0 \ xa5dtype \ xa6object \ xa4data \ x94 \ xa1a \ xa1b \ xa1c \ xa1d \ xa8compress \ xcx \ x86 \ xa3typ \ xa5index \ xa5klass \ xa5Index \ xa4name \ xc0 \ xa5dtype \ xa6object \ xa4data \ x93 \ xa1I \ xa2II \ xa3III \ xa8compress \ xc0 \ xa6blocks \ x86 \ x86 \ xa4locs \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x09 \ xa4ndim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ xd8 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x04 \ x05 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa5shape \ x86 \ x05 \ x03 \ xa5dtype \ xa5int64 \ xa5klass \ xa8IntBlock \ xa8compress \ xc0 \ x86 \ xa4loc s \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x01 \ xa4ndim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ xd7 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8compress \ xc0 \ xa6values ​​\ xcx \ xxx \ x09 \ x05 \ x05 \ xxx \ xxx \ x09 \ xxx \ x09 \ xxx \ xa5dtype \ xaedatetime64 [ns] \ xa5klass \ xadDatetimeBlock \ xa8compress \ xc0 \ x86 \ xa4locs \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x01 \ xa4dim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ xd7 \ x00 \ x03 \ x00 \ \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa \ compress \ xcx \ xa6values ​​\ x87 \ xa3typ \ xa8category \ xa5class \ xabCategorical \ xa4name \ xc0 \ xa5codes \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ \ xa4int8 \ xa4data \ xc7 \ x03 \ x00 \ X02 \ X01 \ x00 \ xa8compress \ xc0 \ xaacategories \ x86 \ xa3typ \ xa5index \ xa5klass \ xa5Index \ xa4name \ xc0 \ xa5dtype \ xa6object \ xa4data \ x93 \ xa4blue \ xa5green \ xa3red "\ xa8compress \ xc0 \ xa7ordered \ xc2 \ xa8compress \ xc0 \ xa5shape \ x91 \ x03 \ xa5dtype \ xa8category \ xa5klass \ xb0CategoricalBlock \ xa8compress \ xc0"

Metadate și statistici

Panda oferă o mulțime de informații despre cadrele de date. Consultați aceste metode:

>>> df.index Index (['I', 'II', 'III'], dtype = "obiect") >>> df.columns Index d '], dtype = "obiect") >>> df.describe () ab numărul 3.0 3.0 media 2.0 5.0 std 1.0 1.0 min 1.0 4.0 25% 1.5 4.5 50% 2.0 5.0 75% 2.5 5.5 max 3.0 6.

Selectarea datelor

Ramele de date vă permit să selectați date. Dacă doriți să selectați un rând pe index, trebuie să utilizați loc atribut. Pentru a selecta coloanele, pur și simplu utilizați numele coloanei. Iată cum puteți selecta rânduri individuale, coloane individuale, o felie de rânduri, o felie de coloane și, nu în ultimul rând, o secțiune dreptunghiulară (subset de rânduri și subset de coloane din aceste rânduri):

Un singur rând ---------- >>> df.loc ['II'] a 2 b 5 c 2017-09-02 00:00:00 d verde Rânduri multiple utilizând indexul întreg (nu 'loc' ) -------------------------------------------- >>> df [ : 2] abcd I 1 4 2017-09-02 roșu II 2 5 2017-09-02 verde Coloană unică ------------- >>> df ['b'] I 4 II 5 III 6 Coloane multiple ---------------- >>> df.loc [:, b ':' c '] bc I 4 2017-09-02 II 5 2017-09 -02 III 6 2017-09-02 Secțiune dreptunghiulară ------------------- >>> df.loc [: 'II', 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09-02 Utilizarea indexului întreg (atunci când indexul real nu este întreg) ------------------------ ------------------------------ >>> df.iloc [: 2, 1: 3] bc I 4 2017-09 -02 II 5 2017-09-02 

În plus față de cele adresate direct selecțiilor de date, puteți selecta și pe baza valorilor. De exemplu, puteți selecta numai rânduri cu valori egale în coloana b: 

>>> df [df.b% 2 == 0] a b c d I 1 4 2017-09-02 roșu III 3 6 2017-09-02 albastru

Sortarea datelor

Panda vă oferă și sortarea. Să ordonăm următorul cadru de date pe indice (rânduri) și pe coloană. Indexarea pe mai multe niveluri este suportată de asemenea:

(d) = pd.DataFrame (np.random.randn (5,2), index = index, coloane = ['a' , 'b']) Sortează după index (în ordine alfabetică și descendentă) ------------------------------------ --------- >>> df.sort_index (ascendent = Fals) ab doi -0.689523 1.411403 trei 0.332707 0.307561 unul -0.042172 0.374922 patru 0.426519 -0.425181 cinci -0.161095 -0.849932 Sorteaza dupa coloana ------ -------- >>> df.sort_values ​​(de = 'a') ab două -0.689523 1.411403 cinci -0.161095 -0.849932 unul -0.042172 0.374922 trei 0.332707 0.307561 patru 0.426519 -0.425181

Concluzie

În această parte a tutorialului, am acoperit tipurile de date de bază ale Pandelor: seria și cadrul de date. Am importat și exportat date, selectând subseturi de date, am lucrat cu metadate și am sortat datele. În partea a doua, vom continua călătoria noastră și vom trata datele lipsă, manipularea datelor, îmbinarea datelor, gruparea de date, serii de timp și complotarea. Rămâneți aproape.

Între timp, nu ezitați să vedeți ceea ce avem la dispoziție pentru vânzare și pentru a studia pe piață și nu ezitați să puneți întrebări și să oferiți feedback-ul dvs. valoros utilizând feedul de mai jos.

Cod