日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【精华总结】全文4000字、20个案例详解Pandas当中的数据统计分析与排序

發布時間:2023/12/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【精华总结】全文4000字、20个案例详解Pandas当中的数据统计分析与排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天小編來給大家講一下Pandas模塊當中的數據統計與排序,說到具體的就是value_counts()方法以及sort_values()方法。

value_counts()方法,顧名思義,主要是用于計算各個類別出現的次數的,而sort_values()方法則是對數值來進行排序,當然除了這些,還有很多大家不知道的衍生的功能等待被挖掘,下面小編就帶大家一個一個的說過去。

導入模塊并且讀取數據庫

我們這次用到的數據集是“非常有名”的泰坦尼克號的數據集,該數據源能夠在很多平臺上都能夠找得到

import?pandas?as?pd df?=?pd.read_csv("titanic_train.csv") df.head()

output

常規的用法

首先我們來看一下常規的用法,代碼如下

df['Embarked'].value_counts()

output

S????644 C????168 Q?????77 Name:?Embarked,?dtype:?int64

下面我們簡單來介紹一下value_counts()方法當中的參數,

DataFrame.value_counts(subset=None,normalize=False,sort=True,ascending=False,dropna=True)

常用到參數的具體解釋為:

  • subset: 表示根據什么字段或者索引來進行統計分析

  • normalize: 返回的是比例而不是頻次

  • ascending: 降序還是升序來排

  • dropna: 是否需要包含有空值的行

對數值進行排序

上面返回的結果是按照從大到小來進行排序的,當然我們也可以反過來,從小到大來進行排序,代碼如下

df['Embarked'].value_counts(ascending=True)

output

Q?????77 C????168 S????644 Name:?Embarked,?dtype:?int64

對索引的字母進行排序

同時我們也可以對索引,按照字母表的順序來進行排序,代碼如下

df['Embarked'].value_counts(ascending=True).sort_index(ascending=True)

output

C????168 Q?????77 S????644 Name:?Embarked,?dtype:?int64

當中的ascending=True指的是升序排序

包含對空值的統計

默認的是value_counts()方法不會對空值進行統計,那要是我們也希望對空值進行統計的話,就可以加上dropna參數,代碼如下

df['Embarked'].value_counts(dropna=False)

output

S??????644 C??????168 Q???????77 NaN??????2 Name:?Embarked,?dtype:?int64

百分比式的數據統計

我們可以將數值的統計轉化成百分比式的統計,可以更加直觀地看到每一個類別的占比,代碼如下

df['Embarked'].value_counts(normalize=True)

output

S????0.724409 C????0.188976 Q????0.086614 Name:?Embarked,?dtype:?float64

要是我們希望對能夠在后面加上一個百分比的符號,則需要在Pandas中加以設置,對數據的展示加以設置,代碼如下

pd.set_option('display.float_format',?'{:.2%}'.format) df['Embarked'].value_counts(normalize?=?True)

output

S???72.44% C???18.90% Q????8.66% Name:?Embarked,?dtype:?float64

當然除此之外,我們還可以這么來做,代碼如下

df['Embarked'].value_counts(normalize?=?True).to_frame().style.format('{:.2%}')

output

Embarked S?72.44% C?18.90% Q?8.66%

連續型數據分箱

和Pandas模塊當中的cut()方法相類似的在于,我們這里也可以將連續型數據進行分箱然后再來統計,代碼如下

df['Fare'].value_counts(bins=3)

output

(-0.513,?170.776]?????871 (170.776,?341.553]?????17 (341.553,?512.329]??????3 Name:?Fare,?dtype:?int64

我們將Fare這一列同等份的分成3組然后再來進行統計,當然我們也可以自定義每一個分組的上限與下限,代碼如下

df['Fare'].value_counts(bins=[-1,?20,?100,?550])

output

(-1.001,?20.0]????515 (20.0,?100.0]?????323 (100.0,?550.0]?????53 Name:?Fare,?dtype:?int64

分組再統計

pandas模塊當中的groupby()方法允許對數據集進行分組,它也可以和value_counts()方法聯用更好地來進行統計分析,代碼如下

df.groupby('Embarked')['Sex'].value_counts()

output

Embarked??Sex??? C?????????male???????95female?????73 Q?????????male???????41female?????36 S?????????male??????441female????203 Name:?Sex,?dtype:?int64

上面的代碼是針對“Embarked”這一類別下的“Sex”特征進行分組,然后再進一步進行數據的統計分析,當然出來的結果是Series數據結構,要是我們想讓Series的數據結果編程DataFrame數據結構,可以這么來做,

df.groupby('Embarked')['Sex'].value_counts().to_frame()

數據集的排序

下面我們來談一下數據的排序,主要用到的是sort_values()方法,例如我們根據“年齡”這一列來進行排序,排序的方式為降序排,代碼如下

df.sort_values("Age",?ascending?=?False).head(10)

output

對行索引重新排序

我們看到排序過之后的DataFrame數據集行索引依然沒有變,我們希望行索引依然可以是從0開始依次的遞增,就可以這么來做,代碼如下

df.sort_values("Age",?ascending?=?False,?ignore_index?=?True).head(10)

output

下面我們簡單來介紹一下sort_values()方法當中的參數

DataFrame.sort_values(by,?axis=0,?ascending=True,?inplace=False,?kind='quicksort',?na_position='last',?# last,first;默認是lastignore_index=False,?key=None)

常用到參數的具體解釋為:

  • by: 表示根據什么字段或者索引來進行排序,可以是一個或者是多個

  • axis: 是水平方向排序還是垂直方向排序,默認是垂直方向

  • ascending: 排序方式,是升序還是降序來排

  • inplace: 是生成新的DataFrame還是在原有的基礎上進行修改

  • kind: 所用到的排序的算法,有快排quicksort或者是歸并排序mergesort、堆排序heapsort等等

  • ignore_index: 是否對行索引進行重新的排序

對多個字段的排序

我們還可以對多個字段進行排序,代碼如下

df.sort_values(["Age",?"Fare"],?ascending?=?False).head(10)

output

同時我們也可以對不同的字段指定不同的排序方式,如下

df.sort_values(["Age",?"Fare"],?ascending?=?[False,?True]).head(10)

output

我們可以看到在“Age”一樣的情況下,“Fare”字段是按照升序的順序來排的

自定義排序

我們可以自定義一個函數方法,然后運用在sort_values()方法當中,讓其按照自己寫的方法來排序,我們看如下的這組數據

df?=?pd.DataFrame({'product':?['keyboard',?'mouse',?'desk',?'monitor',?'chair'],'category':?['C',?'C',?'O',?'C',?'O'],'year':?[2002,?2002,?2005,?2001,?2003],'cost':?['$52',?'$24',?'$250',?'$500',?'$150'],'promotion_time':?['20hr',?'30hr',?'20hr',?'20hr',?'2hr'], })

output

當中的“cost”這一列帶有美元符號“$”,因此就會干擾排序的正常進行,我們使用lambda方法自定義一個函數方法運用在sort_value()當中

df.sort_values('cost',?key=lambda?val:?val.str.replace('$',?'').astype('float64') )

output

當然我們還可以自定義一個更加復雜一點的函數,并且運用在sort_values()方法當中,代碼如下

def?sort_by_cost_time(x):if?x.name?==?'cost':return?x.str.replace('$',?'').astype('float64')elif?x.name?==?'promotion_time':return?x.str.replace('hr',?'').astype('int')else:return?xdf.sort_values(['year',?'promotion_time',?'cost'],?key=sort_by_cost_time )

output

還有另外一種情況,例如我們遇到衣服的尺碼,XS碼、S碼、M碼、L碼又或者是月份,Jan、Feb、Mar、Apr等等,需要我們自己去定義大小,這個時候我們需要用到的是CategoricalDtype

cat_size_order?=?CategoricalDtype(['XS',?'S',?'M',?'L',?'XL'],?ordered=True ) cat_size_order

output

CategoricalDtype(categories=['XS',?'S',?'M',?'L',?'XL'],?ordered=True)

于是針對下面的數據

df?=?pd.DataFrame({'cloth_id':?[1001,?1002,?1003,?1004,?1005,?1006],'size':?['S',?'XL',?'M',?'XS',?'L',?'S'], })

output

我們將事先定義好的順序應用到該數據集當中,代碼如下

df['size']?=?df['size'].astype(cat_size_order) df.sort_values('size')

output

先通過astype()來轉換數據類型,然后再進行排序。

對比Excel系列圖書累積銷量達15w冊,讓你輕松掌握數據分析技能,感興趣的同學可以直接在各大電商平臺搜索書名了解:

總結

以上是生活随笔為你收集整理的【精华总结】全文4000字、20个案例详解Pandas当中的数据统计分析与排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。