Pandas是一個基於Numpy的數據分析包,這個庫就是為數據分析而生的,你可以向操作Excel一樣操作Pandas,實現數據的選擇排序、篩選過濾、統計分析等功能,實際上,Pandas就是Python中的Excel,學習Pandas之後你會更加深刻的理解這句話是多麼的形象準確的。 為了簡化表示,本文 ...
Pandas是一個基於Numpy的數據分析包,這個庫就是為數據分析而生的,你可以像操作Excel一樣操作Pandas,實現數據的選擇排序、篩選過濾、統計分析等功能,實際上,Pandas就是Python中的Excel,在學習Pandas之後你會更加深刻的理解這句話是多麼的形象準確的。
為了簡化表示,本文示例中的pd表示pandas庫,即import pandas as pd。
一、基礎數據結構DataFrame和Series
Pandas中最基礎的數據結構就是DataFrame和Series,從數組的角度理解,可以將DataFrame看作是二維數組,將Series看作是一維數組,當然,最直觀的理解就是DataFrame是一個Excel表格,由行索引、列名和數據(二維數組)組成,而Series是則表中的一列數據,只有行索引和數據(一維數組)兩部分。
1. 創建DataFrame和Series
一個DataFrame可以看作是由行索引、列名及數據(二維數組)三部分構成,對於行索引,在Pandas中的處理是比較特殊的,比如有n行數據,預設情況下,行索引會是我們熟悉的從0到n-1的索引號,但是我們也可以自己指定每一行的行索引,或者說是行標簽,通過行標簽同樣也能取到對應行的數據。當然,列名如果沒有指定,同樣是0到n-1的序號。
通過列表創建DataFrame:
通過字典創建DataFrame:
通過文件創建DataFrame:
csv文件數據
代碼示例
通過列表創建Series:
2. 查看DataFrame和Series
DataFrame和Series對象有許多快速查看自身信息的屬性和方法,因為Series的許多屬性和方法與DataFrame都是相似的,所以這裡就只列一些DataFrame中比較常用的:
- DataFame.columns:表格的列名。
- DataFame.dtypes:列的數據類型。
- DataFame.index:表格的行索引。
- DataFame.size:表格中的元素個數。
- DataFame.values:表格中的數據,返回的是一個二維數組對象。
- DataFame.head(n):預設展示表格前5行數據,也可以指定展示前n行數據。
- DataFame.tail(n):預設展示表格末尾5行數據,也可以指定展示預設n行數據。
- DataFame.info():查看表格的一個簡單彙總信息,包括有多少行、有多少列、每列的數據類型等信息。
簡單示例:
二、索引操作
這裡說的索引指的是行索引或者說行標簽,Pandas中關於行索引有許多巧妙且實用的用法,能幫助我們更好的進行數據分析,具體見示例代碼。
對於索引的使用,即可以像Numpy中那樣去操作Pandas中的索引,也可以使用iloc()方法和loc()方法去操作索引,區別在於iloc()方法只能用於原始的0到n-1索引,而loc()方法可以將自己指定的行標簽像索引一樣去操作,具體見示例代碼。
三、常用方法
因為Pandas的核心是Numpy庫,所以Numpy中的一些特色用法在Pandas中也是可以使用的,比如通過算術運算符實現對每個元素的加減乘除等操作,以及使用max、mean等統計方法在Pandas中也都是支持的。
以下列舉一些DataFrame和Series的常用操作和方法(具體的參數使用請參考對應的幫助文檔或官方API文檔),為了簡化表示,df代表DataFrame對象,s代表Series對象,具體使用效果見示例代碼。
- [df/s]+3:就像Numpy中的數組操作一樣,表示對錶格中的每個元素進行加法運算,當然,其他的算術運算也是可以的。(這裡的3只是舉例用的數字)
- [df/s].max():返回表格中各列的最大值。
- [df/s].min():返回表格中各列的最小值。
- [df/s].mean():返回表格中各列的平均值。
- [df/s].replace(to_replace=None, value=None):將表格中的to_replace替換為value。
- [df/s].append(other):將一個表格追加到另一個表格中,並返回一個合併之後的新表格。
- [df/s].drop(labels=None, axis=0, index=None, columns=None):刪除指定內容。
- [df/s].drop_duplicates():刪除重覆值,可以使用subset參數刪除指定列的重覆值。
- [df/s].isnull():判斷表格是否為空。
- [df/s].fillna(value):將空值填充為指定值。
- pd.cut(x, bins, labels=None):按照bins參數給數組x分段,如果x是一個具體的數字,則會將數組平均分成x段,如果x是一個列表,則按照列表表示的區間來分段,同時可以使用labels參數給每個區間指定一個label。
- df.describe():將表格中數據類型為數字的元素篩選出來,然後按列進行一些簡單的統計。
- df.cov():計算斜方差。
- df.corr():計算相關係數,計算結果在[-1, 1]之間,1表示兩者的變化趨勢是相同的,-1則表示變化趨勢是相反的,0則表示變化趨勢完全不相關。
- df.copy()或s.copy():返回一個表格的副本。
- df.sort_values(by, ascending=True):按照by參數指定的列進行排序,可以使用ascending參數指定以升序排序。
- s > 3:返回列中每個元素的條件判斷結果(即布爾索引),用法和Numpy一樣。(這裡的3只是舉例用的數字)
- s.value_counts(ascending=False, bins=None):對列中的每個值進行個數統計,可以使用ascending參數指定統計結果以升序排列,使用bins參數讓統計結果分段顯示。
- s.str.lower():轉化為小寫。
- s.str.upper():轉化為大寫。
- s.str.len():返回字元串的長度。
- s.str.strip():去除兩邊空白內容,其他類似功能還有lstrip()和rstrip()。
- s.str.replace(pat, repl):將字元串中的pat替換為repl。
- s.str.split(pat=None, expand=False):將字元串根據pat分隔,返回一個DataFrame對象,如果指定expand為True,會將DataFrame“拉直”變為一個Series對象。
- s.str.contains(pat):判斷是否包含指定值pat。
- s.str.get_dummies(sep='|'):指定分隔符,並返回一個DataFrame對象,這個方法常用於關聯分析。
四、SQL功能
Pandas中有一些方法能實現像SQL一樣的功能,如groupby方法可以實現SQL中的分組功能,merge方法可以實現SQL中的表連接功能,具體見示例代碼。
五、透視表
所謂透視表,就是使用pivot()方法或pivot_table()方法從原本的表格中抽取三列內容並將其轉換為另一個表格,以便更直觀、更方便地去觀察和分析這三列數據,具體效果看了示例就明白了。
六、時間處理
Pandas中有一套自己的時間字元串處理方法,而且使用起來也很方便,如pd.Timestamp()可以將字元串轉換為時間戳,pd.Timedelta()可以進行時間的加減運算,pd.to_datetime()可以將字元串轉換為日期。如果遇到了時間格式字元串,建議優先考慮Pandas自帶的時間處理方式。
七、批量處理map和apply
如果想要對錶格中某行或某列的所有元素執行同一個操作,可以使用map()方法, 而想要對錶格中所有行或所有列都執行同一個操作,則可以使用apply()方法。