python怎么批量处理数据的优点_Python数据处理干货,一文带你深入理解pandas的批量处理方式...
前言
數據處理中,經常需要針對某一列進行操作(提取、拆解、計算),從而獲取新的數據。而在 pandas 中不需要你編寫循環遍歷,那么,如何在 pandas 中快速方便批量處理數據?本文將對相關知識點進行詳細講解。
本文你將會學到以下內容:
怎樣深入理解 apply、map、applymap
需要注意的一些坑(apply 會執行內部方法2次!為什么?)
高級應用(傳入額外的參數、結果擴展)
注意,本文內容將會綜合運用專欄之前章節的知識點,建議你順序閱讀理解本專欄的文章。
本文字數4000+,內含許多原理性的知識,這些會對日后的知識點有所幫助,請大家務必好好理解。
到處都是方法
我當初學習 pandas 的時候,發現 DataFrame 與 Series 都會有這3個方法中的部分或全部,如下:
但是,看著這個表就可以記住這些方法了嗎?如果你理解他們的方法名字表示的語義,可以更好記住并理解他們。
遍歷的語義
pandas 本質上是對表格數據的封裝,而表格數據處理必然需要遍歷數據。然而,在實際使用 pandas 過程中,一般都不提倡自己編寫遍歷代碼對數據進行遍歷處理,因此才產生一系列關于遍歷語義的相關方法與概念(本文介紹的3個方法、軸的概念、以及許多其他方法)。
遍歷處理數據,共有2種方式 第一種是按行或列遍歷,如下圖:
第二種是直接遍歷到每個單值,如下圖:
相當于表格中的單元格
本文講解的某些方法分別表示以上某種語義,我們來一個個理解他們。
apply
我們先看看 pandas 中遍歷處理行或列的方法 apply。
DataFrame 與 Series 的 apply 方法,語義是批量對Series區域應用指定的方法。apply 的意思就是"應用"。我知道這說法不是地球人可以理解的,別急,繼續看。
先從簡單的例子開始。 如下的一個表格數據:
"對表格的每行求和,結果放入D列",如下:
apply 方法第一個參數是一個可執行的對象,比如自定義方法或lambda,注意方法必須接受一個參數。后面會解釋為什么
第二個參數 axis ,指定按哪個方向擴展區域
我們通過示意圖進一步解析這個過程,如下:
注意此時調用的是 DataFrame 的 apply 方法,語義就是"對表格應用指定的方法"
但是 apply 方法的第一個參數指定的方法,每次只處理一個 Series 區域,那么我們就需要告訴 pandas ,怎么確定這個 Series 區域
通過 axis=1 ,告訴 pandas 沿著軸1方向擴展區域,上圖的藍線部分
確定了 Series 區域框(上圖藍色框),那么這個藍框會向下掃過每一行
在 pandas 中,不管你是獲取一行還是一列,返回的都是 Series(表示某個方向上的一系列的值),因此,每一行的 Series 將會分別傳入我們定義的方法的參數 x 中
apply 方法返回的同樣是一個 Series
如果對這里的 axis 不理解,請看本專欄之前的文章,有非常詳細的講解
pandas 中對常用的聚合計算方法做了字符串映射,比如上述的求和例子,可以如下編寫:
既然我們理解對行求和,那么對列求和,就很好理解,只需要修改 axis 參數即可。如下:
許多小伙伴都知道如何為 DataFrame 添加新的列,只需要指定一個不存在的列名,然后賦值給一個 Series 即可新增一列。比如:df["new_col"]= df["col1"] * 2 。 同樣的原理也可以添加新行,只是我們需要使用 loc[行索引] 表示不存在的行索引
上面介紹的都是從 DataFrame 調用 apply 方法,同樣地,單個 Series 同樣可以調用 apply 方法,語義是"對這一系列的區域應用指定方法"。
當我們需要對單獨一列進行處理的時候,即可使用。 比如:"對C列值乘以2,結果放到D列",如下:
原理與 DataFrame 的基本一致,只是現在對 Series 調用 apply 方法,不需要再通過參數 axis 指定區域方向
同樣的,對某行也可以調用 apply 方法。謹記,列與行都是 Series
就這么一個簡單的方法值得用這么多篇幅來講解嗎?這是因為上面說的是基礎,有了基礎,會更容易理解其他知識,舉一反三。接下來加點難度咯。
apply 中只能返回 單個值嗎
目前為止,我們講解了 apply 的常用方式,當調用 apply 方法時,真的只能返回一個 Series 結果嗎?
實際上,apply 方法之所以返回的是一個 Series ,是因為我們指定的處理方法只返回一個值,因此多次返回的值組成一個 Series 。
先用一個簡單例子說明。 對A列的值乘以2,對B列的值乘以3,結果作為新列,如下:
注意方法 cal_mul_col 的定義,這次返回的是一個元組(包含2個值)
但是 apply 方法默認會把你的方法返回作為一個值放入一個 Series中,因此我們指定參數 result_type="expand" ,意思為擴展返回類型
現在 apply 方法的返回結果將是一個 DataFrame
pandas 中的通用規則是,當返回的是多個 Series,那么將會變為一個 DataFrame 返回
來一個示意圖加深理解,如下:
第一步是藍色線,會把每一行作為一個 Series 傳入方法 cal_mul_col 的參數 x_df
注意此時的 x_df 是一個 Series ,而 Series 是有索引的,此時這個 x_df 的索引是 DataFrame 的列名,因此可以通過 x_df["A"] 訪問 A 列值
總結
以上是生活随笔為你收集整理的python怎么批量处理数据的优点_Python数据处理干货,一文带你深入理解pandas的批量处理方式...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转正答辩提问_电信专业学生党支部预备党员
- 下一篇: python怎么将png转为tif_pn