Pandas er et fantastisk dataanalyseverktøy for Python. Den er designet for å operere på relasjonelle eller merkede data, og gir deg verktøy for å skjære og terning som du vil.
I denne todelte opplæringen lærer du om de grunnleggende datastrukturene i Pandas: serien og datarammen. Du lærer også hvordan du velger data, håndterer manglende verdier, manipulerer dataene dine, kombinerer dataene dine, grupperer dataene dine, jobber med tidsserier og til og med plottedata.
For å installere, bare pip installere pandas
. Det vil ta seg av å installere numpy også hvis du ikke har det installert.
Pandas-serien er skrevet og merket 1-D-arrays. Dette betyr at hvert element kan nås med sin etikett i tillegg til indeksen.
Her er en serie heltall hvor etikettene er romerske tall. Du kan indeksere og skille med etikettene eller heltallindeksene. I motsetning til vanlig Python-liste skiver, blir det siste elementet inkludert ved bruk av etiketter!
>>> s = pd.Series (np.arange (1,5), ['I', 'II', 'III', 'IV', 'V']) >>> s ['III'] 3 >>> 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
Hvis du ikke oppgir en indeks, opprettes en 0-basert heltallindeks automatisk:
>>> s = pd.Series ((50, 7, 88, 9)) >>> s 0 50 1 7 2 88 3 9
Nå er det en liten hemmelighet for deg. Pandas-serien er en wrapper rundt Numpy's arrays.
>>> s.values array ([50, 7, 88, 9]) >>> type (s.values)
I motsetning til Python lister eller numpy arrays, opererer på serie justere på indeksen. Hvis indeksene ikke samsvarer, vil foreningen av indekser bli brukt med manglende verdier etter behov. Her er noen eksempler som bruker dikt som data, slik at nøklene blir serieindeksen:
>>> s1 = pd.Series (dikt (a = 1, b = 2, c = 3)) >>> s2 = pd.Series (dikt (a = 4, b = 5, c = 6, d = 7 )) >>> s1 + s2 a 5,0 b 7,0 c 9,0 d NaN >>> s1 [1:] * s2 [: - 1] en NaN b 10,0 c 18,0
Datarammer er primærpandas datastruktur. De representerer tabeller med data der hver kolonne er en serie. Datarammer har også en indeks, som tjener som en radetikett. En dataramme har også kolonneetiketter. Slik erklærer du en dataramme ved hjelp av en dikt.
>>> df = pd.DataFrame (dikt (a = [1, 2, 3], b = [4,5,6], c = pd.Timestamp ('20170902'), d = pd.Categorical ([' rød ',' grønn ',' blå ']))) >>> df abcd 0 1 4 2017-09-02 rød 1 2 5 2017-09-02 grønn 2 3 6 2017-09-02 blå
Merk at en heltallindeks (radetikett) ble opprettet automatisk. Du kan selvfølgelig gi din egen indeks:
>>> df.index = ('I II III'.split ()) >>> df a b c d I 1 4 2017-09-02 rød II 2 5 2017-09-02 grønn III 3 6 2017-09-02 blå
Datarammer kan bygges fra et meget bredt spekter av kilder:
Du kan også importere eller laste inn data fra mange filformater og databaser som:
Slik leser du en CSV-fil:
data.csv -------- I, 1,4,2017-09-02, rød II, 2,5,2017-09-02, grønn III, 3,6,2017-09-02, blå >>> pd.read_csv ('data.csv') I 1 4 2017-09-02 rød 0 II 2 5 2017-09-02 grønn 1 III 3 6 2017-09-02 blå
Her er den komplette listen over read_functions ():
>>> read_functions = [en etter en i dir (pd) hvis 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
Det finnes tilsvarende metoder på selve dataarkobjektet for eksport av dataene til mange formater og databaser. Slik eksporterer du til json og msgpack:
>>> df.to_json () '"a": "I": 1, "II": 2, "III": 3, "b": "I": 4, "II": 5 , "III": 6, "c": "I": 1504310400000, "II": 1504310400000, "III": 1504310400000, "d": "I": "rød", "II" grønn", "III": "blå" >>> df.to_msgpack () b '\ x84 \ xa3typ \ xadblock_manager \ xa5klass \ xa9DataFrame \ xa4axes \ x92 \ x86 \ xa3typ \ xa5index \ xa5klass \ xa5Index \ xa4name \ xc0 \ xa5dtype \ xa4bx \ xa4data \ x94 \ xa1a \ xa1b \ xa1c \ xa1d \ xa8compress \ xc0 \ x86 \ xa3typ \ xa5index \ xa5klass \ xa5Index \ xa4name \ xc0 \ xa5dtype \ xa6object \ xa4data \ x93 \ xa1I \ xa2II \ xa3III \ xa8compress \ xc0 \ xa6blocks \ x93 \ x86 \ xa4locs \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x02 \ 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 \ x02 \ x00 \ X00 \ x00 \ x00 \ x03 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x05 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ X06 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa5shape \ x92 \ x02 \ X03 \ xa5dtype \ xa5int64 \ xa5klass \ xa8IntBlock \ xa8compress \ xc0 \ x86 \ xa4loc s \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x01 \ xa4ndim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ xd7 \ x00 \ x02 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8compress \ xc0 \ xa6values \ xc7 \ x18 \ x00 \ x00 \ x00 \ fast \ xafVb \ xe0 \ x14 \ x00 \ x00 \ fast \ xafVb \ xe0 \ x14 \ x00 \ x00 \ fast \ xafVb \ xe0 \ x14 \ xa5shape \ x92 \ x01 \ X03 \ xa5dtype \ xaedatetime64 [ns] \ xa5klass \ xadDatetimeBlock \ xa8compress \ xc0 \ x86 \ xa4locs \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x01 \ xa4ndim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ xd7 \ x00 \ x03 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8compress \ xc0 \ xa6compues \ x87 \ xa3typ \ xa8category \ xa5klass \ xabCategorical \ xa4name \ xc0 \ xa5codes \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x03 \ xa4ndim \ x01 \ xa5dtype \ xa4int8 \ xa4data \ xc7 \ x03 \ x00 \ x02 \ x0x \ xa8compress \ xc0 \ xaacategories \ x86 \ xa3typ \ xa5index \ xa5klass \ xa5Index \ xa4name \ xc0 \ xa5dtype \ xa6object \ xa4data \ x93 \ xa4blue \ xa5green \ xa3red \ xa8compress \ xc0 \ xa8order \ xc2 \ xa8compress \ xc0 \ xa5shape \ x91 \ x03 \ xa5dtype \ xa8category \ xa5klass \ xb0CategoricalBlock \ xa8compress \ xc0 '
Pandas gir mye informasjon om datarammer. Sjekk ut disse metodene:
>>> df.index Indeks (['I', 'II', 'III'], dtype = "objekt") >>> df.columns Indeks (['a', 'b', 'c' d '], dtype = "objekt") >>> df.describe () ab count 3.0 3.0 gjennomsnitt 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 maks 3.0 6.
Datarammer lar deg velge data. Hvis du vil velge en rad etter indeks, må du bruke loc
Egenskap. For å velge kolonner bruker du bare kolonnens navn. Slik velger du individuelle rader, individuelle kolonner, et stykke rader, et stykke kolonner, og sist men ikke minst, en rektangulær del (delmengde av rader og delmengde av kolonner fra disse radene):
Enkelt rad ---------- >>> df.loc ['II'] a 2 b 5 c 2017-09-02 00:00:00 d grønn Flere rader ved hjelp av helhetsindeks (ingen 'loc' ) -------------------------------------------- >>> df [ : 2] abcd 1 1 4 2017-09-02 rød II 2 5 2017-09-02 grøn Enkeltkolonne ------------- >>> df ['b'] I 4 II 5 III 6 Flere kolonner ---------------- >>> df.loc [:, 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09 -02 III 6 2017-09-02 Rektangulær del ------------------- >>> df.loc [: 'II', 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09-02 Bruke helhetsindeks (når faktisk indeks ikke er heltall) ------------------------ ------------------------------ >>> df.iloc [: 2, 1: 3] bc I 4 2017-09 -02 II 5 2017-09-02
I tillegg til de som direkte adresserer datavalg, kan du også velge basert på verdier. For eksempel kan du bare velge rader med likeverdier i kolonne b:
>>> df [df.b% 2 == 0] a b c d I 1 4 2017-09-02 rød III 3 6 2017-09-02 blå
Pandas gir deg også sortering. La oss sortere følgende dataramme etter indeks (rader) og etter kolonne. Multiple-indeksering støttes også:
index = ['en', 'to', 'tre', 'fire', 'fem'] df = pd.DataFrame (np.random.randn (5,2), indeks = indeks, kolonner = ['a' , 'b']) Sorter etter indeks (alfabetisk og synkende) ------------------------------------ --------- >>> df.sort_index (stigende = False) ab to -0.689523 1.411403 tre 0.332707 0.307561 one -0.042172 0.374922 four 0.426519 -0.425181 five -0.161095 -0.849932 Sorter etter kolonne ------ -------- >>> df.sort_values (by = 'a') ab to -0.689523 1.411403 five -0.161095 -0.849932 one -0.042172 0.374922 three 0.332707 0.307561 four 0.426519 -0.425181
I denne delen av opplæringen dekket vi de grunnleggende datatyper av Pandas: serien og datarammen. Vi importerte og eksporterte data, valgte delsett av data, arbeidet med metadata, og sorterte dataene. I del to fortsetter vi vår reise og håndterer manglende data, data manipulering, dataflyting, datagruppering, tidsserier og plotting. Følg med.
I mellomtiden, ikke nøl med å se hva vi har tilgjengelig for salg og for studier på markedet, og ikke nøl med å stille spørsmål og gi din verdifulle tilbakemelding ved hjelp av feedet under.