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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python mean dropna_小丸子踏入python之路:python_day05(用Pandas处理泰坦尼克船员获救数据titanic_train.csv)...

發(fā)布時(shí)間:2023/12/10 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python mean dropna_小丸子踏入python之路:python_day05(用Pandas处理泰坦尼克船员获救数据titanic_train.csv)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

泰坦尼克船員獲救數(shù)據(jù):

titanic_train.csv

用excel打開數(shù)據(jù)集。顯示如下:

寫在前邊:

為了方便以后運(yùn)用numpy和pandas的庫(kù),分別造它們的別名np和pd.

import pandas as pd #造pandas的別名為pd

import numpy as np #造numpy的別名為np

一、讀取數(shù)據(jù)

import pandas as pd #造pandas的別名為pd

import numpy as np #造numpy的別名為np

#泰坦尼克號(hào)船員獲救數(shù)據(jù)

titanic_survival = pd.read_csv("titanic_train.csv")

titanic_survival.head()#head()無(wú)參數(shù),默認(rèn)返回?cái)?shù)據(jù)的前5行

運(yùn)行結(jié)果:

二、對(duì)數(shù)據(jù)進(jìn)行處理

1.?用.isnull()來(lái)處理數(shù)據(jù)的缺失值

其實(shí)數(shù)據(jù)都有缺失值,在進(jìn)行數(shù)據(jù)處理的時(shí)候首先對(duì)缺失值要有一個(gè)詳細(xì)的了解。

下邊將通過(guò)對(duì)列“age”列的處理來(lái)看一下缺失值的情況的。

用.isnull()可以返回缺失值的情況。若當(dāng)前值缺失,返回true,否則返回false。

age = titanic_survival["Age"]print(age.loc[0:10]) #顯示age數(shù)據(jù)的0——10行

#用.isnull()對(duì)缺失值進(jìn)行處理。若當(dāng)前的值為一個(gè)缺失值,則返回true,否則返回false

age_is_null =pd.isnull(age)print(age_is_null)#將age_is_null的值為true的留下來(lái),把a(bǔ)ge_is_null值為false的過(guò)濾掉

age_null_true =age[age_is_null]print(age_null_true) #打印所有的缺失值

age_null_count= len(age_null_true) #打印缺失值的個(gè)數(shù)

print("age屬性缺失值的個(gè)數(shù):",age_null_count)

運(yùn)行結(jié)果:

2.缺失值的那點(diǎn)事

2.1 當(dāng)不對(duì)缺失值進(jìn)行處理的時(shí)候會(huì)有什么后果呢?

為什么要對(duì)缺失值進(jìn)行處理?

打比方:

目標(biāo):現(xiàn)在想要求出船員的平均年齡。

過(guò)程:則對(duì)“Age”這列數(shù)據(jù)進(jìn)行操作。用sum()函數(shù)求出船員的年齡總和。用len()求出樣本數(shù)據(jù)的長(zhǎng)度,即船員的個(gè)數(shù)。

#目標(biāo):求船員的平均年齡#過(guò)程:用sum()函數(shù)求出船員的年齡總和。用len()求出樣本數(shù)據(jù)的長(zhǎng)度,即船員的個(gè)數(shù)

mean_age = sum(titanic_survival["Age"])/len(titanic_survival["Age"]) #船員的平均年齡

print("平均年齡 =",mean_age) #打印平均年齡

那么這樣的操作是否能得到我們想要的結(jié)果呢?

運(yùn)行結(jié)果:

這樣的顯示結(jié)果是因?yàn)樵镜摹癆ge”數(shù)據(jù)中存在缺失值,而缺失值會(huì)被標(biāo)記為NaN,所以參與運(yùn)算后平均年齡的返回結(jié)果為NaN

2.2?如何對(duì)缺失值未處理造成的后果進(jìn)行調(diào)整呢?

由2.1明顯的看出缺失值的錯(cuò)在對(duì)數(shù)據(jù)的處理帶來(lái)的后果,那么接下來(lái),我們就用不同的方法對(duì)其進(jìn)行解決。

2.2.1?直接過(guò)濾缺失值的辦法。

有第一節(jié)中,age_is_null的變量,我們得到了關(guān)于是否為缺失值的返回。

當(dāng)其為缺失值的時(shí)候,age_is_null = True

但其不是缺失值的時(shí)候,age_is_null = False

#對(duì)上邊缺失值導(dǎo)致結(jié)果出不來(lái)的情況進(jìn)行一個(gè)處理。

#最簡(jiǎn)單的方法就是把有缺失值的直接去掉,只保留沒有缺失值的,并進(jìn)行運(yùn)算。

good_ages = titanic_survival["Age"][age_is_null ==False]#[age_is_null == False]若沒有缺失值,則保留。(由此濾去缺失值)#print(good_ages)

correct_mean_age = sum(good_ages) /len(good_ages)print("平均年齡 =",correct_mean_age)

運(yùn)行結(jié)果:

2.2.2?直接用pandas中提供的mean()方法來(lái)處理

correct_mean_age = titanic_survival["Age"].mean() #直接用Pandas中自帶的mean()函數(shù)求平均

print("用mean()得到的平均年齡 =",correct_mean_age)

運(yùn)行結(jié)果:

2.2.3?注意

其實(shí)直接濾去缺失值的樣本并不是一個(gè)很好的方法,其實(shí)我們可以拿年齡的平均數(shù)、中位數(shù)、重?cái)?shù)進(jìn)行一個(gè)填充。

3.求每類船艙對(duì)應(yīng)的平均票價(jià)

3.1?用for循環(huán)的方式求出平均

要求:船艙等級(jí)一共有[1,2,3]三種,分別對(duì)應(yīng)不同的票價(jià),所以每一級(jí)船艙都有自己的平均票價(jià)。求每級(jí)船艙的平均票價(jià)。

過(guò)程:通過(guò)for循環(huán)對(duì)每一類船艙進(jìn)去抽取,抽取出屬于同一類船艙等級(jí)的船客的全部信息,再?gòu)拿恳粋€(gè)分類船客中抽出“Fare”(船票價(jià)格)這列數(shù)據(jù),對(duì)其用,mean()函數(shù)求平均,再返回給每一類的類別。

#船艙等級(jí)一共有3種,求每一種船艙等級(jí)對(duì)應(yīng)的平均票價(jià)

passenger_classes = [1,2,3] #船艙等級(jí)用list列出[1,2,3]

fares_by_class = {} #定義空的字典,用來(lái)存放船艙等級(jí)以及對(duì)應(yīng)的平均票價(jià)

for this_class in passenger_classes: #對(duì)每一類船艙進(jìn)行循環(huán)

pclass_rows = titanic_survival[titanic_survival["Pclass"] == this_class] #當(dāng)this_class = 1時(shí),返回的是所有一等艙的船客的信息

#this_class = 2/3時(shí)同理

pclass_fares = pclass_rows["Fare"] #再?gòu)拿看稳〉玫男畔⒅?#xff0c;返回“Fare”(票價(jià))這列的數(shù)據(jù)

fare_for_class = pclass_fares.mean() #用.mean()對(duì)票價(jià)求平均

fares_by_class[this_class] = fare_for_class #將對(duì)應(yīng)的平均票價(jià)傳給對(duì)應(yīng)的船艙

print("每類船艙對(duì)應(yīng)的平均票價(jià) =", fares_by_class)

運(yùn)行結(jié)果:

3.2?用pandas自帶的函數(shù).pivot_table()來(lái)統(tǒng)計(jì)船艙等級(jí)與平均票價(jià)的關(guān)系

看了3.1后發(fā)現(xiàn),我們的需求很簡(jiǎn)單,但是代碼實(shí)現(xiàn)起來(lái)并不是很簡(jiǎn)便,那么有沒有什么Pandas自帶的方法來(lái)簡(jiǎn)便的完成這類數(shù)據(jù)統(tǒng)計(jì)的操作呢?答案當(dāng)然是肯定的啦,不然我怎么會(huì)又開了3.2.?吼吼

.pivot_table() :?相當(dāng)于一個(gè)數(shù)據(jù)透視表。

也相當(dāng)于統(tǒng)計(jì)一個(gè)量與其他量之間關(guān)系的一個(gè)函數(shù)

.pivot_table()有三個(gè)參數(shù):

index:表示接下來(lái)要統(tǒng)計(jì)的信息是以誰(shuí)為基準(zhǔn)的,index就 = 誰(shuí)

values:表示用統(tǒng)計(jì)index與誰(shuí)之間的關(guān)系,values就 = 誰(shuí)

aggfunc:表示index與values之間的什么關(guān)系,aggfunc就 = 什么關(guān)系(不寫的話,默認(rèn)求均值)

#用.pivot_table來(lái)統(tǒng)計(jì)Pclass和Fare之間的關(guān)系#三個(gè)參數(shù):index:表示接下來(lái)要統(tǒng)計(jì)的信息是以誰(shuí)為基準(zhǔn)的,index就=誰(shuí)(每個(gè)船艙等級(jí)對(duì)應(yīng)的平均票價(jià),所以index = Pclass船艙等級(jí))#values:表示用統(tǒng)計(jì)Pclass與誰(shuí)之間的關(guān)系,values就=誰(shuí)(Pclass與票價(jià)之間的關(guān)系,values = Fare)#aggfunc:表示Pclass與Fare之間的什么關(guān)系,求的是船艙等級(jí)與票價(jià)的平均值之間的關(guān)系,所以aggfunc=np.mean()passenger_classes = titanic_survival.pivot_table(index = "Pclass",values = "Fare",aggfunc =np.mean)print(passenger_classes)

運(yùn)行結(jié)果:

4.用.pivot_table()求每類船艙對(duì)應(yīng)的平均存活率

#求每類船艙對(duì)應(yīng)的存活率#.pivot_table的三個(gè)參數(shù):#三個(gè)參數(shù):index:表示接下來(lái)要統(tǒng)計(jì)的信息是以誰(shuí)為基準(zhǔn)的,index就=誰(shuí)(每個(gè)船艙等級(jí)對(duì)應(yīng)的平均存活率,所以index = Pclass船艙等級(jí))#values:表示用統(tǒng)計(jì)Pclass與誰(shuí)之間的關(guān)系,values就=誰(shuí)(Pclass與存活率之間的關(guān)系,values = Survived)#aggfunc:表示Pclass與Survived之間的什么關(guān)系,求的是船艙等級(jí)的平均存活率的關(guān)系,所以aggfunc=np.mean()

passenger_survical = titanic_survival.pivot_table(index = "Pclass",values = "Survived",aggfunc =np.mean)print(passenger_survical)

運(yùn)行結(jié)果:

5.用.pivot_table()求每類船艙對(duì)應(yīng)的平均年齡

#求每類船艙對(duì)應(yīng)的平均年齡#.pivot_table的三個(gè)參數(shù):#三個(gè)參數(shù):index:表示接下來(lái)要統(tǒng)計(jì)的信息是以誰(shuí)為基準(zhǔn)的,index就=誰(shuí)(每個(gè)船艙等級(jí)對(duì)應(yīng)的平均年齡,所以index = Pclass船艙等級(jí))#values:表示用統(tǒng)計(jì)Pclass與誰(shuí)之間的關(guān)系,values就=誰(shuí)(Pclass與年齡之間的關(guān)系,values = Age)#aggfunc:表示Pclass與Age之間的什么關(guān)系,求的是船艙等級(jí)的平均年齡的關(guān)系,所以aggfunc=np.mean()

passenger_age = titanic_survival.pivot_table(index = "Pclass",values = "Age",aggfunc =np.mean)print(passenger_age)

運(yùn)行結(jié)果:

6.?用.pivot_table()看一個(gè)量與其他兩個(gè)量之間的關(guān)系

需求:想要看不同的登船地點(diǎn)(C,Q,S)的總的票價(jià)和總的獲救人數(shù)。

過(guò)程:用.pivot_table()的話,對(duì)于index ,接下來(lái)要統(tǒng)計(jì)的東西是以登船地點(diǎn)為基準(zhǔn)的,所以index = "Embarked"

對(duì)于values,要統(tǒng)計(jì)的是不同登船地點(diǎn)與票價(jià)和是否獲救之間的關(guān)系,所以values = ["Fare","Survived" ]

對(duì)于aggfunc,要統(tǒng)計(jì)的是不同登船地點(diǎn)的總的票價(jià)和總的獲救人數(shù),所以aggfunc = np.sum

port_stats = titanic_survival.pivot_table(index = "Embarked",values = ["Fare","Survived"],aggfunc =np.sum)print(port_stats)

運(yùn)行結(jié)果:

7.?用.dropna()扔掉具有缺失值的行

#用.dropna扔掉具有缺失值的行

titanic_survival.head(7)

new_titanic_survival= titanic_survival.dropna(axis = 0,subset = ["Age","Sex"])#看一些Age和Sex這兩列有沒有缺失值的,如果有,就把具有缺失值的這行數(shù)據(jù)扔掉。

titanic_survival.head(7)#new_titanic_survival.head(7) #分別把drop前后的前7行數(shù)據(jù)看一下吧

運(yùn)行結(jié)果:dropna之前的數(shù)據(jù)

注意:此打印的結(jié)果是不帶print的打印方式,因?yàn)閹в衟rint的打印一行顯示不完,看起來(lái)不夠清楚。

dropna之后的數(shù)據(jù)

8.?用.loc()確定到每一個(gè)坐標(biāo)上的數(shù)據(jù)

數(shù)據(jù)中每一個(gè)具體的值都是由一個(gè)行號(hào)和列名唯一確定的,所以完全可以用行號(hào)和列名來(lái)返回這個(gè)位置上的值。

#如何取確定位置上的一個(gè)數(shù)據(jù)

row_index_83_age = titanic_survival.loc[83,"Age"]

row_index_766_pclass= titanic_survival.loc[766,"Pclass"]print("第83行的age =",row_index_83_age)print("第766行的pclass =",row_index_766_pclass)

運(yùn)行結(jié)果:

9.用.sort_values()進(jìn)行數(shù)據(jù)的重新排序,并用.reset_index()重置排序后的index值(即行號(hào))。

用.sort_values()對(duì)數(shù)據(jù)進(jìn)行排序后,雖然行的順序因?yàn)榕判驐l件發(fā)生了變化,但是其行號(hào)卻還保持著之前的樣子,為了讓排序后的數(shù)據(jù)的行號(hào)變成從0開始,依次增大,所以運(yùn)用.reset_index()進(jìn)行重置。

new_titanic_survival = titanic_survival.sort_values("Age",ascending = False) #根據(jù)“Age”的大小逆序排列。#print(new_titanic_survival[0:10]) #打印未進(jìn)行.reset_index時(shí)的數(shù)據(jù)前10行

titanic_reindexed = new_titanic_survival.reset_index(drop =True)#print(titanic_reindexed.loc[0:10])

new_titanic_survival[0:10]titanic_reindexed.loc[0:10]

運(yùn)行結(jié)果:

注意:此打印的結(jié)果是不帶print的打印方式,因?yàn)閹в衟rint的打印一行顯示不完,看起來(lái)不夠清楚。

未進(jìn)行.reset_index時(shí)的數(shù)據(jù)前10行

進(jìn)行.reset_index后的數(shù)據(jù)前邊10行

10、apply(自定義函數(shù)名)的功能

我們知道pandas已經(jīng)提供了很多個(gè)功能強(qiáng)大的函數(shù),但是還是會(huì)有一些具體的操作沒有辦法直接用已經(jīng)定義的函數(shù)來(lái)完成的,此時(shí)我們應(yīng)該如何執(zhí)行這些呢?

一方面,可以通過(guò)寫代碼慢慢的拼接出來(lái)。

另一方面,可以通過(guò)寫apply()函數(shù),而這個(gè)apply()函數(shù)就相當(dāng)于我們可以進(jìn)行一個(gè)自定義函數(shù)的操作。

在apply()中傳進(jìn)來(lái)的是一個(gè)函數(shù)名,而傳進(jìn)來(lái)的函數(shù)可以是自己定義的函數(shù),即將自己的操作定義成一個(gè)函數(shù)的形式,然后apply一下,這時(shí)就會(huì)在這個(gè)DataFrame中執(zhí)行這個(gè)操作了。

10.1?關(guān)于apply(自定義函數(shù)名)?的第一個(gè)例子

具體如下所示:

需求:我們想要返回?cái)?shù)據(jù)集合的第100行數(shù)據(jù)。

過(guò)程:先定義一個(gè)返回第100行數(shù)據(jù)的函數(shù)hundredth_row ,然后在apply一下

#定義一個(gè)新的函數(shù)hundredth_row,用來(lái)返回第100行數(shù)據(jù)

defhundredth_row(column):

hundredth_item= column.loc[99]returnhundredth_item

hundredth_row= titanic_survival.apply(hundredth_row) #將新定義好的函數(shù)apply一下

print(hundredth_row)

運(yùn)行結(jié)果:

10.2 關(guān)于apply(自定義函數(shù)名)?的第二個(gè)例子

用apply(自定義函數(shù)名)來(lái)得到每一個(gè)屬性缺失值的個(gè)數(shù)。

#返回所有屬性缺失值的個(gè)數(shù)

defisnull_count(column):

column_null= pd.isnull(column) #返回值是true或flase

null = column[column_null] #缺失值列表

returnlen(null)

column_null_count=titanic_survival.apply(isnull_count)print(column_null_count)

運(yùn)行結(jié)果:

10.3 關(guān)于apply(自定義函數(shù)名)?的第三個(gè)例子

用apply(自定義函數(shù)名)來(lái)對(duì)船艙等級(jí)【1,2,3】進(jìn)行一個(gè)改寫,改成First Class,Second Class ,Third Class

#將船艙等級(jí)進(jìn)行一個(gè)轉(zhuǎn)化,1——First Class....

defwhich_class(row):

pclass= row["Pclass"]ifpd.isnull(pclass):return "UnKnown"

elif pclass == 1:return "First Class"

elif pclass == 2:return "Second Class"

elif pclass == 3:return "Third Class"classes= titanic_survival.apply(which_class,axis = 1)print(classes)

運(yùn)行結(jié)果:

10.4 關(guān)于apply(自定義函數(shù)名)?的第四個(gè)例子

將年齡離散化,在本實(shí)例數(shù)據(jù)集上的“Age”是一個(gè)連續(xù)的值,這里以18為界限,將其離散化。

defgenerate_age_label(row):

age= row["Age"]ifpd.isnull(age):return "Unknow"

elif age < 18:return "minor"

else:return "adult"age_labels= titanic_survival.apply(generate_age_label, axis = 1)print(age_labels)

運(yùn)行結(jié)果:

友情贈(zèng)送

利用上邊的自定義函數(shù),使用.pivot_table()函數(shù)得到年齡階段與獲救率之間的關(guān)系。

titanic_survival["age_labels"] = age_labels #將上一個(gè)里邊返回的關(guān)于age_labels的數(shù)據(jù)組合成數(shù)據(jù)的一列#得到年齡階段與存活率之間的關(guān)系

age_group_survival = titanic_survival.pivot_table(index = "age_labels",values = "Survived")print(age_group_survival)

運(yùn)行結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的python mean dropna_小丸子踏入python之路:python_day05(用Pandas处理泰坦尼克船员获救数据titanic_train.csv)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。