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.
För att installera, bara pip installera pandor
. Det kommer att ta hand om att installera numpy också om du inte har det installerat.
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
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å
Dataramar kan konstrueras från en mycket stor mängd källor:
Du kan också importera eller ladda data från många filformat och databaser som:
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 '
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.
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å
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
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.