1. 程式人生 > >python pandas高階進階

python pandas高階進階

這是要匯入的模組
在這裡插入圖片描述

一、資料規整化 – 合併資料集

  1. pd.merge :連線dataframe的行,實現的是資料庫的連線操作
  2. concat: 沿一條軸將多個物件堆疊到一起
  3. combine_first:可以將重複資料編接在一起,用一個物件中的值填充另一個物件中的缺失值!

1.pd.merge合併資料集

(1)兩個有相同列名的dataframe

 # 建立兩個dataframe
df1 = DataFrame(
    {
        'key':list('bbacaab'),
        'data1':range(7)
    }
) #通過字典來建立 df2= DataFrame( { 'key':list('abd'), 'data2':range(3) } ) print('df1:\n',df1) print('df2:\n{}'.format(df2))

在這裡插入圖片描述

# merge 連線  採用的是‘inner'連線的方式,取交集部分,沒有交集的會捨棄掉
pd.merge(df1,df2)
# 預設情況下merge會將重複的列當作鍵來合併,建議使用on 來指定以什麼來合併
pd.merge(df1,df2,on='key')

在這裡插入圖片描述
(2)兩個無相同列名的dataframe進行合併
在這裡插入圖片描述

# 進行合併,以不同的列
pd.merge(df3,df4,left_on='Lkey',right_on='Rkey')

在這裡插入圖片描述
3.pd.merge引數 how = outer 作為合併引數取並集

pd.merge(df1,df2,how='outer')

在這裡插入圖片描述

(4)pd.merge() 引數:how=‘left’ 作為合併引數,以左邊為主
pd.merge() 引數:how=‘right’ 作為合併引數,以右邊為主

(5)以多個列名進行合併

在這裡插入圖片描述

pd.merge(df_left,df_right,on=['key1','key2'],how='outer')

df_left 指定以key1進行連線,df_right指定以key2進行連線,以取並集的方式連線
在這裡插入圖片描述

pd.merge(df_left,df_right,on=['key1','key2'],how='inner')

df_left 指定以key1進行連線,df_right指定以key2進行連線,取交集
在這裡插入圖片描述
總結:pandas.merge(df1,df2,on=’ ‘,how=’ ')

2.concat連線資料

語法:pandas.concat([s1,s2,…],axis=0或1,join=’ ',keys=[ ])

  • 建立三個series,並用concat進行連線,結果是直接將之進行拼接

在這裡插入圖片描述

  • axis預設為0,豎著連線,資料直接拼接在後面;

  • axis=1時,橫著連線,沒有資料的顯示nan
    在這裡插入圖片描述
    在這裡插入圖片描述

  • 引數:join=‘inner’ 交集 ; join=‘outer’ 並集

pd.concat([s1,s4],axis=1,join='outer')  # 預設的連線方式,並集
pd.concat([s1,s4],axis=1,join='inner') # 交集
  • 引數keys:連線時給層次索引
# 連線時給層次索引
s5 = pd.concat([s1,s2,s3],keys=['one','two','three'])

在這裡插入圖片描述

3.pd.combin_first()合併重疊資料

如果左邊有值,顯示左邊的資料;
如果左邊是nan,右邊有值,則顯示右邊的資料;
如果左邊和右邊都是nan,則顯示nan

語法:

s1.combine_first(s2)

s1 是左邊的資料集,s2是右邊的資料集。Series和Dataframe都可以使用

二、資料規整化–重塑與軸向選擇

主要用於重塑表格型資料的結構

  • stack :將列旋轉為行
  • unstack:將行旋轉為列

1.series和DataFrame的相互轉化

(1)對於一個層次化索引的series,可以使用unstack 將其轉化為一個dataframe:

在這裡插入圖片描述
unstack()有兩個引數:0或1
為0時:是預設的引數,將最外層的行索引轉化為列索引
為1時:將最內層的行索引轉化為列索引

注意:unstack除了使用引數1,0來指定列,還可以通過索引的名稱來進行指定,例如:
在這裡插入圖片描述
(2)對於一個多層次的DataFrame,使用df.stack()將之轉化為series
在這裡插入圖片描述
stack 沒有引數1,只有引數0
(3)對dataframe進行unstack和stack的時候,指定哪個索引名稱旋轉,哪個索引就會旋轉為最低級別。
在這裡插入圖片描述

三、資料規整化-資料轉換

在這裡插入圖片描述

1.清除重複資料

語法:xx.drop_duplicates()
(1)按指定列清除重複資料
在這裡插入圖片描述
(2)保留重複值的第一個或最後一個。
keep=‘first’(預設) :保留重複值的第一個資料
keep=‘last’ :保留重複值的最後一個數據
在這裡插入圖片描述

2.利用函式和對映進行轉換

步驟:
1、先編寫一個對映
2、再利用map函式來進行對映

準備一個有對映的資料集:
在這裡插入圖片描述

接下來我們要將以下的資料一一對映到上面的資料集中:
在這裡插入圖片描述
先試試直接將meat_toanimal 中的值直接新增到df4中,看似沒有問題,但實際上只是擴充套件了一列,並沒有進行一一對映。
在這裡插入圖片描述
現在,我們要來進行一一對映啦:
第一種方法:讀取df4中的food列,將他們全部轉化為小寫的abcd,再和meat_toanimal進行一一對映。
在這裡插入圖片描述
第二種方法:直接傳入一個能使用此功能的函式
在這裡插入圖片描述

3.替換值

利用fi11na方法填充缺失資料可以看做值替換的一種特殊情況。雖然前面提到的map可用於修改物件的資料子集,而 replace則提供了一種實現該功能的更簡單、更靈活的方式。
語法:xx.replace(原資料,替換的值)
注意:替換後原資料還是不變的
在這裡插入圖片描述
同時替換多個值的方法:
方法一:
在這裡插入圖片描述
方法二:
在這裡插入圖片描述

4.資料拆分

(1)cut:等分割槽間

語法:pandas.cut(資料,分箱,right=’ ',labels=[])
right預設為True,左閉右開,當right='False’的時候,就是左開右閉
labels:給區間取名稱

【例1】
可以看到ages 按照bins進行cut,被分成了四個區間,返回的是區間而不是值,第一個資料17因為不在任何一個區間內,因此得到的是nan
在這裡插入圖片描述
一般來說,我們都要對分箱後的結果進行統計
在這裡插入圖片描述

看看使用引數right的結果,right=‘False’ 區間變成左開右閉
在這裡插入圖片描述

咱們給區間取個名兒吧~ labels=[]
在這裡插入圖片描述

【例2】前面的那個例子是我們自己定義了一個bins區間,當然我們也可以寫上一個數字,表示自動將區間平均分為幾等分
在這裡插入圖片描述

(2)qcut:等分值

在這裡插入圖片描述
如果不想等分值,可以定義份數:pd.qcut(x,q) q引數 如果是列表,範圍是在0-1之間

這是等分為4段的例子:
在這裡插入圖片描述

(重要)連續資料不等分 會根據 如:q=[0,0.1,0.3,0.6,1],每2個數的差值進行比例計算,把最大值和最小值插值的區間按照這個比例進行劃分

這是把值分為1份、2份、3份、4份
在這裡插入圖片描述

5.檢查和過濾異常值

異常值的過濾或變換運算在很大程度上其實就是陣列運算。
【案例】想過濾絕對值大於3的數

我們先準備一個數據集,統計看看大概情況:
在這裡插入圖片描述
把包含絕對值大於3的行資料都過濾掉
在這裡插入圖片描述
看!最大值和最小值的絕對值都小於3了
在這裡插入圖片描述
這只是舉了一個絕對值的例子,當然要結合其他的陣列運算靈活使用哦~

四、 Pandas中的資料載入、儲存與解析

在這裡插入圖片描述

1.讀取

讀寫文字格式的檔案 :read_csv()

(1)直接讀取:預設分割符是‘,’,預設首行為列名

read_csv(‘文字名稱’)
在這裡插入圖片描述
也可以用read_table進行讀取,但是需要指定分隔符
在這裡插入圖片描述

(2)讀取沒有列名的檔案,加入引數header=None

在這裡插入圖片描述

(3)給沒有列名的檔案取個列名

在這裡插入圖片描述

(4)給沒有列名的檔案取個列明,並將其中一個變為行索引

在這裡插入圖片描述

  • 多個列作為行索引
    在這裡插入圖片描述

(5)讀取不規則檔案,使用正則表示式

這個檔案是中間有很多空格
在這裡插入圖片描述

(6)跳行讀取 ,skiprows引數

在這裡插入圖片描述

(7)讀取有缺失值的檔案,na_values = [‘null’]

在這裡插入圖片描述

2.寫入csv

語法:xx.to_csv() ,預設逗號分割

(1)直接儲存資料

將df9 直接儲存到csv檔案裡
在這裡插入圖片描述
預覽一下儲存的內容
在這裡插入圖片描述

(2)to_csv()的一些引數

在這裡插入圖片描述

五、資料聚合與分組計算

在這裡插入圖片描述

1.資料分組與聚合結合

(1)
我們先看看這個具體是怎麼操作的,先準備一個數據集
在這裡插入圖片描述

我們把data1的資料按照key1來進行分組,這一步是沒有進行任何計算的,只有分組
在這裡插入圖片描述
現在我們可以對它進行任何聚合運算了
在這裡插入圖片描述

(2)
接下來,我們看看對多個條件進行分組是怎麼樣的,我們把data1按照key1和key2進行分組,得到了一個物件
在這裡插入圖片描述
轉化為列表看看是個什麼東西
在這裡插入圖片描述
a one 有兩個值 在索引為0的位置的值是1;在索引為4的位置的值是5
a two 在索引為1的位置值是2
b one 在索引為2的位置值是3
b two 在索引為3的位置值是4

下面仍然對它進行聚合
在這裡插入圖片描述
(3)以上我們都是先讀取再分組,再聚合。
當然我們也可以先分組再讀取,再聚合
在這裡插入圖片描述
(4)對分組進行迭代
在這裡插入圖片描述
(5)size方法檢視分組資料的數量
在這裡插入圖片描述
(6)讀取分組後的資料
轉換為列表或者字典進行讀取
在這裡插入圖片描述
(7)通過字典或者series進行分組
我們準備好一個數據集
在這裡插入圖片描述
①用字典進行分組
現在建一個字典,a,b,c一一對應,意思就是將abc分為一個組main,de分為1個組minor,再將之運用到df1中,按列索引進行分組。
在這裡插入圖片描述
②用series進行分組
在這裡插入圖片描述

2.資料聚合

(1)自帶的聚合函式

求平均值:mean
求和:sum
求最大值:max
求最小值:min
統計:describe
計數:count

(2)自定義聚合函式

使用agg函式可以定義求哪些聚合
在這裡插入圖片描述
給列取個名字
在這裡插入圖片描述

使用字典來給不同的列應用不同的函式
在這裡插入圖片描述
看看as_index=False有什麼作用:
在這裡插入圖片描述

3.神奇的apply

讀取一個數據,看一下它的前5條,如果想看倒數幾條的資料就用tail()
在這裡插入圖片描述
新增一列資料,消費百分比在這裡插入圖片描述
得到消費佔比最高的6個數據
在這裡插入圖片描述
通過apply運用上面的函式,顯示的都是預設的資料
在這裡插入圖片描述
應用一些引數
在這裡插入圖片描述

4.分位數和桶分析

準備一個數據集,拆分為區間相等的4份
在這裡插入圖片描述

在這裡插入圖片描述

5.分組加權平均數

準備一個數據:
在這裡插入圖片描述
進行加權:
在這裡插入圖片描述

6.透視表

語法:xx.pivot_table()
讀取資料:
在這裡插入圖片描述
直接進行透視:
在這裡插入圖片描述
和上面效果一樣,說明預設是mean
在這裡插入圖片描述
指定行和列索引
在這裡插入圖片描述
margins=True

使用aggfunc引數
在這裡插入圖片描述
在這裡插入圖片描述