用Python做資料分析光是掌握numpy和matplotlib可不夠,Pandas是必須要掌握的一個重點,numpy雖然能夠幫我們處理處理數值型資料,但是這還不夠,很多時候,我們的資料除了數值之外,還有字串,還有時間序列等,比如:我們通過爬蟲獲取到了存盤在資料庫中的資料,
今天來分享一些Pandas必會的用法,讓你的資料分析水平更上一層樓,
一、Pandas兩大資料結構的創建
| 序號 | 方法 | 說明 |
|---|---|---|
| 1 | pd.Series(物件,index=[ ]) | 創建Series,物件可以是串列\ndarray、字典以及DataFrame中的某一行或某一列 |
| 2 | pd.DataFrame(data,columns = [ ],index = [ ]) | 創建DataFrame,columns和index為指定的列、行索引,并按照順序排列 |
舉例:用pandas創建資料表:
df = pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006],
"date":pd.date_range('20130102', periods=6),
"city":['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
"age":[23,44,54,32,34,32],
"category":['100-A','100-B','110-A','110-C','210-A','130-F'],
"price":[1200,np.nan,2133,5433,np.nan,4432]},
columns =['id','date','city','category','age','price'])
二、DataFrame常見方法
| 序號 | 方法 | 說明 |
|---|---|---|
| 1 | df.head() | 查詢資料的前五行 |
| 2 | df.tail() | 查詢資料的末尾5行 |
| 3 | pandas.qcut() | 基于秩或基于樣本分位數將變數離散化為等大小桶 |
| 4 | pandas.cut() | 基于分位數的離散化函式 |
| 5 | pandas.date_range() | 回傳一個時間索引 |
| 6 | df.apply() | 沿相應軸應用函式 |
| 7 | Series.value_counts() | 回傳不同資料的計數值 |
| 8 | df.reset_index() | 重新設定index,引數drop = True時會丟棄原來的索引,設定新的從0開始的索引,常與groupby()一起用 |
舉例:重新索引
df_inner.reset_index()
三、資料索引
| 序號 | 方法 | 說明 |
|---|---|---|
| 1 | .values | 將DataFrame轉換為ndarray二維陣列 |
| 2 | .append(idx) | 連接另一個Index物件,產生新的Index物件 |
| 3 | .insert(loc,e) | 在loc位置增加一個元素 |
| 4 | .delete(loc) | 洗掉loc位置處的元素 |
| 5 | .union(idx) | 計算并集 |
| 6 | .intersection(idx) | 計算交集 |
| 7 | .diff(idx) | 計算差集,產生新的Index物件 |
| 8 | .reindex(index, columns ,fill_value, method, limit, copy ) | 改變、重排Series和DataFrame索引,會創建一個新物件,如果某個索引值當前不存在,就引入缺失值, |
| 9 | .drop() | 洗掉Series和DataFrame指定行或列索引, |
| 10 | .loc[行標簽,列標簽] | 通過標簽查詢指定的資料,第一個值為行標簽,第二值為列標簽, |
| 11 | df.iloc[行位置,列位置] | 通過默認生成的數字索引查詢指定的資料, |
舉例:按索引提取單行的數值
df_inner.loc[3]
四、DataFrame選取和重新組合資料的方法
| 序號 | 方法 | 說明 |
|---|---|---|
| 1 | df[val] | 從DataFrame選取單列或一組列;在特殊情況下比較便利:布爾型陣列(過濾行)、切片(行切片)、或布爾型DataFrame(根據條件設定值) |
| 2 | df.loc[val] | 通過標簽,選取DataFrame的單個行或一組行 |
| 3 | df.loc[:,val] | 通過標簽,選取單列或列子集 |
| 4 | df.1oc[val1,val2] | 通過標簽,同時選取行和列 |
| 5 | df.iloc[where] | 通過整數位置,從DataFrame選取單個行或行子集 |
| 6 | df.iloc[:,where] | 通過整數位置,從DataFrame選取單個列或列子集 |
| 7 | df.iloc[where_i,where_j] | 通過整數位置,同時選取行和列 |
| 8 | df.at[1abel_i,1abel_j] | 通過行和列標簽,選取單一的標量 |
| 9 | df.iat[i,j] | 通過行和列的位置(整數),選取單一的標量 |
| 10 | reindex | 通過標簽選取行或列 |
| 11 | get_value | 通過行和列標簽選取單一值 |
| 12 | set_value | 通過行和列標簽選取單一值 |
舉例:使用iloc按位置區域提取資料
df_inner.iloc[:3,:2] #冒號前后的數字不再是索引的標簽名稱,而是資料所在的位置,從0開始,前三行,前兩列,
五、排序
| 序號 | 函式 | 說明 |
|---|---|---|
| 1 | .sort_index(axis=0, ascending=True) | 根據指定軸索引的值進行排序 |
| 2 | Series.sort_values(axis=0, ascending=True) | 只能根據0軸的值排序, |
| 3 | DataFrame.sort_values(by, axis=0, ascending=True) | 引數by為axis軸上的某個索引或索引串列, |
舉例:按照索引列排序
df_inner.sort_index()
六、相關分析和統計分析
| 序號 | 方法 | 說明 |
|---|---|---|
| 1 | .idxmin() | 計算資料最小值所在位置的索引(自定義索引) |
| 2 | .idxmax() | 計算資料最大值所在位置的索引(自定義索引) |
| 3 | .argmin() | 計算資料最小值所在位置的索引位置(自動索引) |
| 4 | .argmax() | 計算資料最大值所在位置的索引位置(自動索引) |
| 5 | .describe() | 針對各列的多個統計匯總,用統計學指標快速描述資料的概要 |
| 6 | .sum() | 計算各列資料的和 |
| 7 | .count() | 非NaN值的數量 |
| 8 | .mean( ) | 計算資料的算術平均值 |
| 9 | .median() | 計算算術中位數 |
| 10 | .var() | 計算資料的方差 |
| 11 | .std() | 計算資料的標準差 |
| 12 | .corr() | 計算相關系數矩陣 |
| 13 | .cov() | 計算協方差矩陣 |
| 14 | .corrwith() | 利用DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關系數, |
| 15 | .min() | 計算資料的最小值 |
| 16 | .max() | 計算資料的最大值 |
| 17 | .diff() | 計算一階差分,對時間序列很有效 |
| 18 | .mode() | 計算眾數,回傳頻數最高的那(幾)個 |
| 19 | .mean() | 計算均值 |
| 20 | .quantile() | 計算分位數(0到1) |
| 21 | .isin() | 用于判斷矢量化集合的成員資格,可用于過濾Series中或DataFrame列中資料的子集 |
| 22 | .unique() | 回傳一個Series中的唯一值組成的陣列, |
| 23 | .value_counts() | 計算一個Series中各值出現的頻率, |
舉例:判斷city列的值是否為北京
df_inner['city'].isin(['beijing'])
七、分組的方法
| 序號 | 方法 | 說明 |
|---|---|---|
| 1 | DataFrame.groupby() | 分組函式 |
| 2 | pandas.cut() | 根據資料分析物件的特征,按照一定的數值指標,把資料分析物件劃分為不同的區間部分來進行研究,以揭示其內在的聯系和規律性, |
舉例:.groupby用法
group_by_name=salaries.groupby('name')
print(type(group_by_name))
輸出結果為:
<class 'pandas.core.groupby.DataFrameGroupBy'>
八、讀寫文本格式資料的方法
| 序號 | 方法 | 說明 |
|---|---|---|
| 1 | read_csv | 從檔案、URL、檔案型物件中加載帶分隔符的資料,默認分隔符為逗號 |
| 2 | read_table | 從檔案、URL、檔案型物件中加載帶分隔符的資料,默認分隔符為制表符(t) |
| 3 | read_ fwf | 讀取定寬列格式資料(也就是說,沒有分隔符) |
| 4 | read_clipboard | 讀取剪貼板中的資料,可以看做read_table的剪貼板版,再將網頁轉換為表格時很有用 |
| 5 | read_excel | 從ExcelXLS或XLSXfile 讀取表格資料 |
| 6 | read_hdf | 讀取pandas寫的HDF5檔案 |
| 7 | read_html | 讀取HTML檔案中的所有表格 |
| 8 | read_json | 讀取JSON字串中的資料 |
| 9 | read_msgpack | 二進制格式編碼的pandas資料 |
| 10 | read_pickle | 讀取Python pickle格式中存盤的任意物件 |
| 11 | read_sas | 讀取存盤于SAS系統自定義存盤格式的SAS資料集 |
| 12 | read_sql | 讀取SQL 查詢結果為pandas的DataFrame |
| 13 | read_stata | 讀取Stata檔案格式的資料集 |
| 14 | read_feather | 讀取 Feather二進制檔案格式 |
舉例:匯入CSV或者xlsx檔案
df = pd.DataFrame(pd.read_csv('name.csv',header=1))
df = pd.DataFrame(pd.read_excel('name.xlsx'))
九、處理缺失資料
| 序號 | 方法 | 說明 |
|---|---|---|
| 1 | .fillna(value,method,limit,inplace) | 填充缺失值 |
| 2 | .dropna() | 洗掉缺失資料 |
| 3 | .info() | 查看資料的資訊,包括每個欄位的名稱、非空數量、欄位的資料型別 |
| 4 | .isnull() | 回傳一個同樣長度的值為布爾型的物件(Series或DataFrame),表示哪些值是缺失的 |
舉例:查看資料表基本資訊(維度、列名稱、資料格式等等)
df.info()
十、資料轉換
| 序號 | 方法 | 說明 |
|---|---|---|
| 1 | .replace(old, new) | 用新的資料替換老的資料,如果希望一次性替換多個值,old和new可以是串列,默認會回傳一個新的物件,傳入inplace=True可以對現有物件進行就地修改, |
| 2 | .duplicated() | 判斷各行是否是重復行,回傳一個布爾型Series, |
| 3 | .drop_duplicates() | 洗掉重復行,回傳洗掉后的DataFrame物件, |
舉例:洗掉后出現的重復值:
df['city'].drop_duplicates()
結語
文章中總結的是都是一些Pandas常用的方法,至于一些基礎的概念還需要你學到Pandas的時候去理解,例如Series是什么?DataFrame是什么?如果你已經清楚了Pandas的這些基礎東西之后,搭配上文章中的這些方法,那你用Pandas去做資料處理和分析必然會游刃有余,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294150.html
標籤:其他
下一篇:關于ELK日志分析系統

