排序
排序:即對里面的數據按照大小,或者按照某種規則排序。
對DataFrame數據進行排序與Series相似,Dataframe也有按sort_values()與 sort_index()分別按照值、索引進行排序。
參數by=“columns_name”指定排序值參考列,默認ascending=True按升序排序,指定inplace=True,將同時修改原數據。可傳入axis=1,按行標簽排序,不過用到的時候不多。
以近期粽子銷售數據為例介紹sort_values()的使用,數據結構如下:
比如我們按照價格進行排序,注意默認是升序:
import pandas as pd
import numpy as np
# 按照發貨地分組
df = pd.read_csv('zongzi.csv')
df1 = df.sort_values(by='價格')
df1.head()
結果:
如果按照降序排列,則需要添加參數ascending=False
df1 = df.sort_values(by='價格',ascending=False)df1.head()
結果:
統計函數
padndas提供了豐富的統計、合并、分組、缺失值等操作函數。
比如靈活高效的groupby功能,它使你能以一種自然的方式對數據集進行切片、切塊、摘要等操作。而如果使用groupby函數則肯定與下面的統計函數息息相關。
常用的統計函數有:
df.count() 非空元素計算
df.min() 最小值
df.max() 最大值
df.idxmin() 最小值的位置,類似于R中的which.min函數
df.idxmax() 最大值的位置,類似于R中的which.max函數
df.quantile(0.1) 10%分位數
df.sum() 求和
df.mean() 均值
df.median() 中位數
df.mode() 眾數
df.var() 方差
df.std() 標準差
df.mad() 平均絕對偏差
df.skew() 偏度
df.kurt() 峰度
df.describe() 一次性輸出多個描述性統計指標
groupby使用介紹
分組運算"split-apply-combine"(拆分-應?-合并)。第?個階段,pandas對象(?論是Series、DataFrame還是其他的)中的數據會根據你所提供的?個或多個鍵被拆分(split)為多組。拆分操作是在對象的特定軸上執?的。例如,DataFrame可以在其?(axis=0)或列(axis=1)上進?分組。然后,將?個函數應?(apply)到各個分組并產??個新值。最后,所有這些函數的執?結果會被合并(combine)到最終的結果對象中。
groupby的語法結構如下:
* by 分組的行或者列
* axis=0 行 / 1 列
* 如果有多層索引可以使用level
以近期粽子銷售數據為例介紹groupby的使用:
數據結構如下
groupby對象的屬性和內容獲取
import pandas as pd
import numpy as np
# 按照發貨地分組
df = pd.read_csv('zongzi.csv')
grouped = df.groupby('發貨地')
print(grouped)
打印結果:
<pandas.core.groupby.generic.dataframegroupby 0x11a97a950="" at="" object="">
查看grouped的組成groups
grouped.groups
當然大家也可以對grouped進行遍歷查看結果:
for group in grouped: print(group)
這么多分組,我們可以選擇一個分組進行查看:
grouped.get_group('上海')
按照某一列分組并進行統計
# 結合統計函數count(),進行發貨地的個數統計
import pandas as pd
import numpy as np
# 按照產地分組并統計個數
df = pd.read_csv('zongzi.csv')
grouped = df.groupby('發貨地')
grouped['發貨地'].count().sort_values(ascending=False) # 統計各個發貨地的個數并降序排列
結果:
當然也可以獲取各個店鋪商品的數量(注意如果是各個店鋪則是按照店鋪分組,然后再對商品名稱進行個數統計)
df['商品名稱'].groupby(df['店鋪']).count().sort_values(ascending=False)
結果:
各個店鋪的銷量總和,銷量列是字符串列
df.info()
所以在進行求和之前我們要進行轉換,只提取銷量的數字變成整型類型的
import pandas as pd
import numpy as np
import re
df = pd.read_csv('zongzi.csv')
# 清洗缺失值的數據,進行填充
df['銷量'].fillna('0人付款', inplace=True)
def convert_sale(row):
if '+' in row['銷量']:
row['銷量'] = row['銷量'].replace('+', '')
print(row)
if '萬' in row['銷量']:
return float(re.search(r'(.+)萬人付款', row['銷量']).group(1)) * 10000
else:
return int(re.search(r'(.+)人付款', row['銷量']).group(1))
df['銷量1'] = df.apply(convert_sale, axis=1)
然后計算總和:
df['銷量1'].groupby(df['店鋪']).sum().sort_values(ascending=False)
按照多列分組,比如每個發貨地的各個店鋪的銷量總和
df.groupby(['發貨地','店鋪'])['銷量1'].sum().sort_values(ascending=False)
獲取分組后的某一部分數據可以使用如下格式:
grouped = df.groupby(by=['O', 'N'])
grouped.count()['M']
或
grouped['M'].count()
所以運行后的結果:
當然還有一些復雜的使用,下篇文章給大家詳細介紹。
更多關于“Python培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業需求,更科學更嚴謹,每年培養泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。