Pandor Den schweiziska armékniven för dina data, del 1

Pandas är en fantastisk dataanalys för Python. Den är utformad för att fungera på relationell eller märkt data och ger dig verktyg för att skära och tärning som du vill. 

I denna tvådelade handledning lär du dig information om de grundläggande datastrukturerna i Pandas: serien och dataramen. Du lär dig också att välja data, hantera saknade värden, manipulera dina data, slå samman dina data, gruppera dina data, arbeta med tidsserier och till och med plottdata.

Installation

För att installera, bara pip installera pandor. Det kommer att ta hand om att installera numpy också om du inte har det installerat.

Serier

Pandas-serien är typade och märkta 1-D-arrays. Det betyder att varje element kan nås av dess etikett utöver dess index.

Här är en serie heltal där etiketterna är romerska siffror. Du kan indexera och skiva med hjälp av etiketterna eller heltalsindexen. Till skillnad från med vanlig Python-lista skivning, när du använder etiketter ingår det sista objektet!

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

Om du inte anger ett index skapas automatiskt ett 0-baserat heltalindex:

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

Nu är här en liten hemlighet för dig. Pandas-serien är ett omslag runt Numpys arrays.

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

Till skillnad från Python listor eller numpy arrays, operationer på serie justera på indexet. Om indexen inte stämmer överens kommer fackföreningen av index att användas med saknade värden. Här är några exempel som använder dikter som data så att nycklarna blir seriens index:

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

Datarammer

Dataramar är den primära pandasdatastrukturen. De representerar tabeller med data där varje kolumn är en serie. Dataramar har också ett index som fungerar som en radetikett. En dataram har också kolonnetiketter. Så här förklarar du en dataram med en dikt. 

>>> df = pd.DataFrame (dict (a = [1, 2, 3], b = [4,5,6], c = pd.Timestamp ('20170902'), d = pd.Categorical ([' röd "," grön "," blå "]))) >>> df abcd 0 1 4 2017-09-02 röd 1 2 5 2017-09-02 grön 2 3 6 2017-09-02 blå

Observera att ett heltal index (rad etikett) skapades automatiskt. Du kan givetvis ge ditt eget index:

>>> 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ön III 3 6 2017-09-02 blå

Importera och exportera data

Dataramar kan konstrueras från en mycket stor mängd källor:

  • dikt av 1-D ndarrays, listor, dikter eller serier
  • 2-D numpy.ndarray
  • strukturerad eller registrerad
  • en annan DataFrame

Du kan också importera eller ladda data från många filformat och databaser som:

  • CSV
  • Excel
  • html
  • HDFStore 
  • SQL

Så här läser du en CSV-fil:

data.csv -------- I, 1,4,2017-09-02, röd II, 2,5,2017-09-02, grön 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ön 1 III 3 6 2017-09-02 blå 

Här är den fullständiga listan med read_functions ():

>>> read_functions = [a för en i dir (pd) om a.startswith ('read_')] >>> skriv ut ('\ 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 finns motsvarande metoder på själva databasobjektet för att exportera data till många format och databaser. Så här exporterar du till json och msgpack:

>>> df.to_json () '"a": "I": 1, "II": 2, "III": 3, "b": "I": 4, "II": 5 "III": "III": "I": 1504310400000, "II": 1504310400000, "III": 1504310400000, "d": "I": "röd", "II" grön "," III ":" blå " >>> 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 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x02 \ x00 \ X00 \ x00 \ x00 \ x03 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xx xx xx xx xx x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x s \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x01 \ xa4ndim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ xd7 \ x00 \ x00 \ x00 \ x00 \ xa8compress \ xc0 \ xa6values ​​\ xc7 \ x18 \ x00 \ x00 \ xed \ xafVb \ xe0 \ x14 \ x00 \ x00 \ xed \ xafVb \ xe0 \ x14 \ 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 \ 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 \ 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 '

Metadata och statistik

Pandas ger mycket information om dataramar. Kolla in dessa metoder:

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

Val av data

Dataramar låter dig välja data. Om du vill välja en rad enligt index måste du använda loc attribut. För att välja kolumner använder du helt enkelt kolumnnamnet. Så här väljer du enskilda rader, enskilda kolumner, en rad rader, en bit kolumner och sist men inte minst en rektangulär sektion (delmängd rader och delmängd kolumner från dessa rader):

Enkel rad ---------- >>> df.loc ['II'] a 2 b 5 c 2017-09-02 00:00:00 d grön Flera rader med heltal index (nej 'loc' ) -------------------------------------------- >>> df [ : 2] abcd 1 1 4 2017-09-02 röd II 2 5 2017-09-02 grön Enstaka kolumnen ------------- >>> df ['b'] I 4 II 5 III 6 Flera kolumner ---------------- >>> df.loc [:, 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09 -02 III 6 2017-09-02 Rektangulär sektion ------------------- >>> df.loc [: 'II', 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09-02 Använda heltal index (när faktiskt index inte är heltal) ------------------------ ------------------------------ >>> df.iloc [: 2, 1: 3] bc I 4 2017-09 -02 II 5 2017-09-02 

Förutom de som direkt adresserar data val kan du också välja baserat på värden. Till exempel kan du bara välja rader med jämnvärden i kolumn 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å

Sortering av data

Pandas ger dig sortering också. Låt oss sortera följande dataram enligt index (rader) och kolumn. Flervärdesindexering stöds också:

index = ['en', 'två', 'tre', 'fyra', 'fem'] df = pd.DataFrame (np.random.randn (5,2), index = index, kolumner = ['a' , 'b']) Sortera efter index (alfabetiskt och nedåtgående) ------------------------------------ --------- >>> df.sort_index (stigande = Falskt) ab två -0.689523 1.411403 tre 0.332707 0.307561 one -0.042172 0.374922 four 0.426519 -0.425181 five -0.161095 -0.849932 Sortera efter kolumn ------ -------- >>> df.sort_values ​​(by = 'a') ab två -0.689523 1.411403 five -0.161095 -0.849932 one -0.042172 0.374922 three 0.332707 0.307561 four 0.426519 -0.425181

Slutsats

I den här delen av handledningen täckte vi de grundläggande datatyperna av Pandas: serien och dataramen. Vi importerade och exporterade data, utvalda delsatser av data, arbetade med metadata och sorterade data. I del två fortsätter vi vår resa och hanterar saknade data, dataprofilering, datasammansmältning, datagruppering, tidsserier och plotting. Håll dig igång.

Tveka inte i tiden att se vad vi har till salu och studera på marknaden, och tveka inte att ställa några frågor och ge din värdefulla feedback genom att använda foderet nedan.