pandas是在數(shù)據(jù)處理、數(shù)據(jù)分析以及數(shù)據(jù)可視化上都有比較多的應(yīng)用,這篇文章就來介紹一下pandas的入門。勞動節(jié)必須得勞動勞動
1. 基礎(chǔ)用法
以下代碼在jupyter中運行,Python 版本3.6。首先導(dǎo)入 pandas
import pandas as pd # 為了能在jupyter中展示圖表 %matplotlib inline #
從csv文件讀取數(shù)據(jù),也可從excel、json文件中讀取 # 也可以通過sql從數(shù)據(jù)庫讀數(shù)據(jù) data = pd.read_csv(
'order_list.csv') # 輸出幾行幾列 data.shape output: (1000, 3)
可以看到,變量 data 是一個二維表,有1000行,3列。pandas中這種數(shù)據(jù)類型被稱作 DataFrame。
# 查看數(shù)據(jù)描述 data.describe()
data 中有3列,good_id、good_cnt 和 order_id 分別代表商品id、購買該商品數(shù)量和訂單id。最左側(cè)是describe
函數(shù)統(tǒng)計的指標(biāo),包括每一列的數(shù)量、均值、標(biāo)準(zhǔn)差、最大值、最小值等等。
# 預(yù)覽數(shù)據(jù),條數(shù)可設(shè) data.head(3) # 獲取第2行數(shù)據(jù) data.loc[2] output: good_id 100042 good_cnt
1 order_id 10000002 Name: 2, dtype: int64 # 獲取多行數(shù)據(jù),數(shù)組元素代表行號 data.loc[[1, 2]] #
獲取商品id=100012的所有記錄 data[data['good_id']==100012] # 獲取商品id=100012且每筆訂單銷量=6的所有記錄
data[(data['good_id']==100087) & (data['good_cnt']==6)] # 獲取訂單號在[10000000,
10000042]中的記錄 data[data['order_id'].isin([10000000, 10000042])] #
畫100012商品,每筆訂單銷量折線圖 data[data['good_id']==100012]['good_cnt'].plot() #
畫100012商品,銷量柱狀圖 data[data['good_id']==100012]['good_cnt'].hist() #
更新數(shù)據(jù),將第1行的good_cnt列改為10 data.loc[1, 'good_cnt'] = 10 data.head(3) #
將100012商品每筆訂單銷量都改為20 data.loc[data['good_id']==100012, 'good_cnt'] = 20
data.head(3)
2. 中級用法
# 統(tǒng)計每種商品出現(xiàn)次數(shù) # 即:每種商品的下單次數(shù) data['good_id'].value_counts() output: 100080 18
100010 16 100073 16 100097 15 100096 15 .. 100079 5 100077 5 100007 4 100037 4
100033 4 Name: good_id, Length: 100, dtype: int64 # 取出商品銷量列,該列中每個值都加1 data[
'good_cnt'].map(lambda x: x+1) output: 0 21 1 11 2 2 3 4 4 10 .. 995 8 996 9 997
6 998 5 999 9 Name: good_cnt, Length: 1000, dtype: int64
這里,map并不改變原有的 data 中的數(shù)據(jù),而是返回新的對象。
# 對數(shù)據(jù)集每列調(diào)用給定的函數(shù) data.apply(len)
這里是對每列執(zhí)行l(wèi)en函數(shù),當(dāng)然apply中的len函數(shù)也可以換成自定義的 lambda 表達(dá)式。另外,如果想按行做處理,則在調(diào)用apply函數(shù)時加上
axis=1參數(shù)即可。
# 對數(shù)據(jù)集中所有元素調(diào)用給定函數(shù) # 同樣不改變原有數(shù)據(jù)集 data.applymap(lambda x: x*100) # 計算每列之間的相關(guān)系數(shù)
data.corr() # 畫出相關(guān)系數(shù)矩陣 pd.plotting.scatter_matrix(data, figsize=(12,8))
以左小角為例,它表示商品id(good_id)和訂單id(order_id)之間的相關(guān)性。由于點比較分散,沒有任何規(guī)律,因此可以說明這兩列在數(shù)據(jù)值上沒有相關(guān)性,這也好理解,因為本來它倆就是不同的概念。
相關(guān)系數(shù)矩陣一般用于機(jī)器學(xué)習(xí)中觀察不同特征之間的相關(guān)性。
3. 高級用法
實現(xiàn)SQL join操作
# 構(gòu)造DateFrame,代表訂單發(fā)生的城市 order_city_df = pd.DataFrame(\ dict(order_id=[10000000,
10000001], \ city=['上海', '北京'])\ ) # 實現(xiàn)join data.merge(order_city_df, on=[
'order_id'])
實現(xiàn)SQL group by操作
# 統(tǒng)計每個商品的總銷量 data.groupby('good_id')['good_cnt'].sum().reset_index()
遍歷 DataFrame 中每行數(shù)據(jù)
dictionary = {} for i,row in data.iterrows(): dictionary[row['good_id']] = row[
'good_cnt']
pandas的入門就介紹到這里,希望能對你有幫助。對于想繼續(xù)深入的朋友可以參考pandas官方文檔,中英文都有。另外,我們使用pandas一般都是單機(jī)來處理,如果數(shù)據(jù)量比較大,單機(jī)運行起來會比較慢。這時候你可能會用到另外一個工具叫
Dask,它的接口兼容 pandas,可以與pandas相互轉(zhuǎn)換,并且可以運行在集群上分布式處理數(shù)據(jù)。
如需完整代碼,在公眾號回復(fù)關(guān)鍵字 pd 即可
歡迎公眾號「渡碼」,輸出別地兒看不到的干貨。
熱門工具 換一換