Panda's het mes van het Zwitserse leger voor uw gegevens, deel 1

Panda's is een geweldige toolkit voor gegevensanalyse voor Python. Het is ontworpen om te werken op relationele of gelabelde gegevens en biedt u tools om te snijden en te dobbelen als u wilt. 

In deze tweedelige tutorial leer je over de fundamentele datastructuren van Panda's: de serie en het dataframe. U leert ook hoe u gegevens selecteert, omgaat met ontbrekende waarden, uw gegevens manipuleert, uw gegevens samenvoegt, uw gegevens groepeert, met tijdreeksen werkt en zelfs gegevens plot.

Installatie

Om te installeren, gewoon pip installeren panda's. Het zorgt ook voor de installatie van numpy als u het niet hebt geïnstalleerd.

Serie

Pandas-series zijn getypeerde en gelabelde 1-D-arrays. Dit betekent dat elk element kan worden benaderd door het label naast de index.

Hier is een reeks van gehele getallen waarbij de labels Romeinse cijfers zijn. U kunt indexeren en segmenteren met behulp van de labels of integer-indexen. In tegenstelling tot bij het standaard snijden in Python-lijst, is het laatste item bij het gebruik van labels inbegrepen!

>>> 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 

Als u geen index opgeeft, wordt automatisch een op 0 gebaseerde integer-index gemaakt:

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

Nu, hier is een klein geheim voor u. De Panda-serie is een verpakking rond de reeksen van Numpy.

>>> s.values ​​array ([50, 7, 88, 9]) >>> type (s.waarden)  

In tegenstelling tot Python-lijsten of numpy-arrays, worden bewerkingen op reeks uitgelijnd op de index. Als de indexen niet overeenkomen, wordt de combinatie van indexen gebruikt met ontbrekende waarden, zoals van toepassing. Hier zijn een paar voorbeelden die dictaten als gegevens gebruiken, zodat de sleutels de serie-index worden:

>>> s1 = pd.Series (dict (a = 1, b = 2, c = 3)) >>> s2 = pd.Series (dict (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] a NaN b 10.0 c 18.0

Dataframes

Dataframes zijn de datastructuur van de primaire panda's. Ze vertegenwoordigen tabellen met gegevens waarbij elke kolom een ​​reeks is. Dataframes hebben ook een index, die dient als een rijlabel. Een dataframe heeft ook kolomlabels. Hier leest u hoe u een dataframe declareert met behulp van een dictaat. 

>>> df = pd.DataFrame (dict (a = [1, 2, 3], b = [4,5,6], c = pd.Timestamp ('20170902'), d = pd.Categorical ([' rood ',' groen ',' blauw ']))) >>> df abcd 0 1 4 2017-09-02 rood 1 2 5 2017-09-02 groen 2 3 6 2017-09-02 blauw

Houd er rekening mee dat een integer-index (rijlabel) automatisch is gemaakt. Je kunt natuurlijk je eigen index opgeven:

>>> df.index = ('I II III'.split ()) >>> df a b c d I 1 4 2017-09-02 rood II 2 5 2017-09-02 groen III 3 6 2017-09-02 blauw

Gegevens importeren en exporteren

Dataframes kunnen worden samengesteld uit een grote verscheidenheid aan bronnen:

  • dictaat van 1-D ndarrays, lijsten, dictaten of series
  • 2-D numpy.ndarray
  • gestructureerde of record ndarray
  • een ander DataFrame

U kunt ook gegevens uit vele bestandsindelingen en databases importeren of laden, zoals:

  • CSV
  • uitmunten
  • HTML
  • HDFStore 
  • SQL

Hier leest u hoe u een CSV-bestand leest:

data.csv -------- I, 1,4,2017-09-02, rood II, 2,5,2017-09-02, groen III, 3,6,2017-09-02, blauw >>> pd.read_csv ('data.csv') I 1 4 2017-09-02 rood 0 II 2 5 2017-09-02 groen 1 III 3 6 2017-09-02 blauw 

Hier is de complete lijst met read_functions ():

>>> read_functions = [a voor a in dir (pd) if 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 

Er zijn overeenkomstige methoden op het dataframe-object zelf voor het exporteren van de gegevens naar vele indelingen en databases. Hier is hoe je exporteert naar json en 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": "rood", "II": " groen "," III ":" blauw " '>>> df.to_msgpack () b' \ x84 \ xa3typ \ xadblock_manager \ xa5klass \ xa9DataFrame \ xa4axes \ x92 \ x86 \ xa3typ \ xa5index \ xa5klass \ xa5Index \ xa4name \ xc0 \ xa5dtype \ xa6object \ 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 \ x01 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8compress \ xc0 \ xa6waarden \ xc70 \ x00 \ x01 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x02 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x03 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x05 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa5shape \ x92 \ x02 \ x03 \ xa5dtype \ xa5int64 \ xa5klass \ xa8IntBlock \ xa8compress \ xc0 \ x86 \ xa4loc s \ x86 \ xa3typ \ xa7ndarray \ xa5domein \ x91 \ x01 \ xa4ndim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ xd7 \ x00 \ x02 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8compress \ xc0 \ xa6waarden \ xc7 \ x18 \ x00 \ x00 \ x00 \ xed \ xafVb \ xe0 \ x14 \ x00 \ x00 \ xed \ xafVb \ xe0 \ x14 \ x00 \ x00 \ xed \ 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 \ x00 \ xa8comprimeer \ xc0 \ xa6waarden \ x87 \ xa3typ \ xa8category \ xa5klass \ xabCategorical \ xa4name \ xc0 \ xa5codes \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x03 \ xa4ndim \ x01 \ xa5dtype \ 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 \ xa8comprimeer \ xc0 \ xa7geplaatst \ xc2 \ xa8compress \ xc0 \ xa5shape \ x91 \ x03 \ xa5dtype \ xa8category \ xa5klass \ xb0CategoricalBlock \ xa8comprimeer \ xc0 '

Metadata en statistieken

Panda's geeft veel informatie over dataframes. Bekijk deze methoden:

>>> df.index Index (['I', 'II', 'III'], dtype = "object") >>> df.columns Index (['a', 'b', 'c', ' d '], dtype = "object") >>> df.describe () ab count 3.0 3.0 mean 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.

Gegevens selecteren

Met dataframes kunt u gegevens selecteren. Als u een rij wilt selecteren op index, moet u de loc attribuut. Om kolommen te selecteren, gebruikt u gewoon de kolomnaam. U kunt als volgt afzonderlijke rijen, afzonderlijke kolommen, een rij rijen, een plak kolommen en als laatste een rechthoekige sectie selecteren (deelverzameling van rijen en subset kolommen uit deze rijen):

Enkele rij ---------- >>> df.loc ['II'] a 2 b 5 c 2017-09-02 00:00:00 d groen Meerdere rijen met integer index (geen 'loc' ) -------------------------------------------- >>> df [ : 2] abcd I 1 4 2017-09-02 rood II 2 5 2017-09-02 groen Eén kolom ------------- >>> df ['b'] I 4 II 5 III 6 Meerdere kolommen ---------------- >>> df.loc [:, 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09 -02 III 6 2017-09-02 Rechthoekige sectie ------------------- >>> df.loc [: 'II', 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09-02 Geheel getalindex gebruiken (wanneer de werkelijke index geen geheel getal is) ------------------------ ------------------------------ >>> df.iloc [: 2, 1: 3] bc I 4 2017-09 -02 II 5 2017-09-02 

Naast die gegevensselecties die direct worden geadresseerd, kunt u ook selecteren op basis van waarden. U kunt bijvoorbeeld alleen rijen met even waarden selecteren in kolom b: 

>>> df [df.b% 2 == 0] a b c d I 1 4 2017-09-02 rood III 3 6 2017-09-02 blauw

Gegevens sorteren

Panda's geeft je ook sorteren. Laten we het volgende gegevensframe sorteren op index (rijen) en op kolom. Indexering op meerdere niveaus wordt ook ondersteund:

index = ['een', 'twee', 'drie', 'vier', 'vijf'] df = pd.DataFrame (np.random.randn (5,2), index = index, kolommen = ['a' , 'b']) Sorteren op index (alfabetisch en aflopend) ------------------------------------ --------- >>> df.sort_index (oplopend = niet waar) ab two -0.689523 1.411403 drie 0.332707 0.307561 one -0.042172 0.374922 four 0.426519 -0.425181 five -0.161095 -0.849932 Sorteren op kolom ------ -------- >>> df.sort_values ​​(door = 'a') ab two -0.689523 1.411403 five -0.161095 -0.849932 one -0.042172 0.374922 three 0.332707 0.307561 four 0.426519 -0.425181

Conclusie

In dit deel van de zelfstudie hebben we de basistyptetypen van Panda's behandeld: de reeks en het gegevensframe. We importeerden en exporteerden gegevens, geselecteerde subsets met gegevens, werkten met metadata en sorteerden de gegevens. In deel twee zullen we onze reis voortzetten en omgaan met ontbrekende gegevens, gegevensmanipulatie, samenvoeging van gegevens, gegevensgroepering, tijdreeksen en plotten. Blijf kijken.

In de tussentijd, aarzel niet om te zien wat we beschikbaar hebben voor de verkoop en voor studie in de markt, en aarzel niet om vragen te stellen en lever waardevolle feedback met behulp van de onderstaande feed.