Pandas閃回咒!如何在Python中重寫SQL查詢?
工作中,頻繁切換是件麻煩事兒。一些程序員只熟悉SQL中的數(shù)據(jù)操作,卻不熟悉Python中的數(shù)據(jù)操作,因此在完成項目時,我們不得不頻繁地在SQL和Python之間進行切換,導(dǎo)致了工作效率低下和生產(chǎn)能力下降。
本文就教你一種方法,使用Pandas在Python中輕松重現(xiàn)SQL結(jié)果。
入門指南
如果電腦中沒有pandas包,則需要先安裝一下:
- Conda install pandas
在這個階段,我們將使用著名的Kaggle泰坦尼克數(shù)據(jù)集:https://www.kaggle.com/c/titanic/data?select=test.csv。
安裝軟件包并下載數(shù)據(jù)后,需要將其導(dǎo)入Python環(huán)境中:
- import pandas as pd
- titanic_df = pd.read_csv("titanic_test_data.csv")
我們將使用pandas數(shù)據(jù)框架來存儲數(shù)據(jù),還將用到各種pandas函數(shù)來操作數(shù)據(jù)框架。
- SELECT, DISTINCT, COUNT, LIMIT
讓我們從經(jīng)常使用的簡單SQL查詢開始。
titanic_df [“ age”]。unique()將在此處返回唯一值的數(shù)組,因此需要使用len()來獲取唯一值的計數(shù)。
- SELECT,WHERE,OR,AND,IN(有條件選擇)
現(xiàn)在你知道了如何以簡單的方式探索數(shù)據(jù)框架,接著來嘗試一些條件吧(在SQL中是WHERE子句)。
如果只想從數(shù)據(jù)框架中選擇特定的列,則可以使用另一對方括號進行選擇。注意,如果要選擇多列,則需要在方括號內(nèi)放置數(shù)組[“ name”,“ age”]。
isin()與SQL中的IN完全相同。要使用NOT IN,需要在Python中使用negation(〜)來獲得相同的結(jié)果。
- GROUP BY,ORDER BY,COUNT
GROUP BY和ORDER BY也是用來探索數(shù)據(jù)的流行SQL,讓我們在Python中嘗試一下。
如果只想對COUNT進行排序,可以將布爾值傳遞給sort_values函數(shù);如果想對多列進行排序,則必須將布爾數(shù)組傳遞給sort_values函數(shù)。sum()函數(shù)將提供數(shù)據(jù)框架中的所有聚合數(shù)值總和列,如果只需要特定列,則需要使用方括號指定列名。
- MIN,MAX,MEAN,MEDIAN
最后,來嘗試一些常見的統(tǒng)計功能,這些功能對于數(shù)據(jù)探索非常重要。
由于SQL沒有中位數(shù)函數(shù),因此將使用BigQuery APPROX_QUANTILES獲取年齡中位數(shù)。pandas聚合函數(shù).agg()還支持其他函數(shù),例如sum。
拒絕頻繁切換,輕松重現(xiàn)查詢,你值得擁有!
你可以在我的Github中查看完整的腳本:https://github.com/chingjunetao/medium-article/tree/master/rewrite-sql-with-python
本文轉(zhuǎn)載自微信公眾號「讀芯術(shù)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系讀芯術(shù)公眾號。