如何查詢你的Pandas數據幀?
譯文【51CTO.com快譯】引言
無論您從數據工程師/數據分析師轉型而來,還是想成為更高效的數據科學家,查詢數據幀都是返回所需特定行的一種很有用的方法。值得一提的是,pandas有一個特定的查詢函數,名為query。不過,我將討論您可以模擬查詢、過濾和合并數據的其他方式。我們將介紹您對數據提出的常見場景或問題,將使用Python而不是SQL來完成。在下面,我將概述使用Python編程語言針對Pandas數據幀查詢行的幾個簡單方法。
多個條件
圖1. 示例數據
作為數據科學家或數據分析師,我們希望返回數據的特定行。其中一個場景是您希望在同一行代碼中運用多個條件。為了展示例子,我創建了名和姓的幾個虛假的示例數據,以及他們各自的性別和生日。該數據顯示在上面的屏幕截圖中。
示例多個條件本質上將回答一個特定的問題,就像您使用SQL時一樣。問題是,我們的數據中有多少比例的數據是男性或出生于2010年至2021年之間的人。
下面是將解決這個問題的代碼(有幾種方法可以回答這個問題,但這是我的具體方法):
- print(“Percent of data who are Males OR were born between 2010 and 2021:”,
- 100*round(df[(df[‘Gender’] == ‘M’) | (df[‘Birthdate’] >= ‘2010–01–01’) &
- (df[‘Birthdate’] <= ‘2021–01–01’)][‘Gender’].count()/df.shape
- [0],4), “%”)
為了更好地直觀顯示該代碼,我還包含了上面相同代碼的屏幕截圖以及輸出/結果。您還可以運用這些條件來返回實際行,而不是從總行中獲取一小部分或百分比的行。
圖2. 條件代碼
這是我們執行的命令的順序:
- 返回帶有男性性別的行
- 包括OR函數 |
- 返回出生日期> 2010和2021的行
- 將所有這些組合起來,然后除以總行數
如您所見,該代碼與您在SQL中看到的相似。我個人認為在pandas中更容易,因為它可以減少代碼,同時還可以在一個簡單的地方直觀地看到所有代碼,無需上下滾動(但這種格式只是本人青睞的)。
按多個特定列合并
圖3. 合并數據幀結果
我們可能已經在其他教程中看到了如何將數據幀合并在一起,所以我想添加一種我還沒有真正見過的一種獨特方法,即按多個特定列合并。在這種情況下,我們想要加入兩個數據幀,其中兩個字段在它們之間共享。不難看出:如果有更多列,這種方法可能更有用。
我們有第一個數據幀df,然后我們按第二個數據幀df2合并列。這是實現我們預期結果的代碼:
- merged_df = df.merge(df2, how=’inner’,
- left_on=cols,
- right_on=cols
- )
為了更好地直觀顯示這種合并和代碼,我給出了下面的屏幕截圖。您會在下面看到第二個數據幀的樣子,包括名和姓,就像它們在第一個數據幀中一樣,但有一個新的列:Numeric。然后,我們有想要合并的特定列,同時返回列Gender、Birthdate和新的Numeric列。列其實是諸多列的列表,名為 cols。
圖4. 合并數據幀
如您所見,這種合并數據幀的方式是一種獲得可從SQL查詢獲得的同樣結果的簡單方法。
結語
在本教程中,我們看到您將在SQL中執行的兩個常見問題或查詢,但最終使用Python中的Pandas數據幀來執行它們。
總而言之,以下是我們所處理的兩個場景:
- 從多個條件返回總數據集的百分比的行
- 按多個特定列合并,以返回帶有新列的最終數據幀。
原文標題:How to Query Your Pandas Dataframe,作者:Matthew Przybyla
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】