Pandas引言(二)

DataFrame的基本操作

讀取數據集

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv('titanic_train.csv')
titanic_survival.head()

在這裏插入圖片描述

查看 Age 列的缺失值情況

age = titanic_survival['Age']
pd.isnull(age).loc[:6]

在這裏插入圖片描述

使用布爾型Series過濾缺失值

age_not_null = age[age.isnull() == False]
age_not_null.loc[:6]

在這裏插入圖片描述

使用布爾型Series選取DataFrame

titanic_survival[age.isnull() == False].tail()

在這裏插入圖片描述

使用 dropna 方法過濾缺失值

titanic_survival.dropna(subset=['Age']).tail()

在這裏插入圖片描述

計算年齡的均值

通過 isnull 方法我們已確定 Age 列存在缺失值,需要注意的是,NAN和任何值做計算時,結果都爲NAN:
在這裏插入圖片描述
所以在對某一列做求和,求均值等操作時,需先過濾掉缺失值:

# 計算年齡平均值
age_null = titanic_survival["Age"].isnull()
age = titanic_survival["Age"][age_null == False]
mean_age = sum(age) / len(age)
mean_age

在這裏插入圖片描述
使用 mean 方法可以很方便地計算均值:
在這裏插入圖片描述

重複值過濾

使用 duplicated 方法查看重複項(True爲已經出現過的重複記錄):

titanic_survival.duplicated(subset=['Sex']).head()

在這裏插入圖片描述
除了指定 subset 參數,還可以使用如下的方式:

titanic_survival['Sex'].duplicated().head()

此外,還可以指定多個列,用於判定重複。下面我們過濾Sex和Age列重複的項:

titanic_survival[titanic_survival.duplicated(subset=['Sex', 'Age']) == False].shape

等價於:

titanic_survival.drop_duplicates(subset=['Sex', 'Age']).shape

在這裏插入圖片描述

分組與聚合操作

使用純 python 計算每類 Pclass 的平均 Fare 值:

# 分組與聚合:計算每類旅客的平均票價,分組即:按旅客類型分組;聚合即:求每組的平均值
passenger_classes = set(titanic_survival["Pclass"])
ava_fares = {}

for _class in passenger_classes:
    pclass_rows = titanic_survival[titanic_survival['Pclass'] == _class]
    pclass_fares = pclass_rows['Fare']
    ava_fare = pclass_fares.mean()
    ava_fares[_class] = ava_fare
    
ava_fares

在這裏插入圖片描述
使用 pandas 的數據透視表 pivot_table ,根據 Pclass 分組,對 Fare 列使用 np.mean 進行聚合:

titanic_survival.pivot_table(index='Pclass', values='Fare', aggfunc=np.mean)

在這裏插入圖片描述
此外,還可以對多個列進行聚合:

titanic_survival.pivot_table(index='Pclass', values=['Fare', 'Survived'], aggfunc=np.sum)

在這裏插入圖片描述
aggfunc 除了指定爲 numpy 中的聚合函數外,還可以其它符合條件的函數,可以應用到Series,返回單個值:

titanic_survival.pivot_table(index='Pclass', values='PassengerId', aggfunc=len)

在這裏插入圖片描述
df.apply() 方法的參數和 aggfunc 指定的函數是同類函數,只不過df.apply()會將此函數應用到所有的列:

def no_100_row(column):
    no_100 = column.iloc[99]
    return no_100

# 對DataFrame的每一列應用上述函數
titanic_survival.apply(no_100_row)

在這裏插入圖片描述

方法總結

方法 說明
pandas.isnull() / series.isnull() 返回是否爲空的 bool 型的 Series 對象(備註:DataFrame 和 Series 都可以通過 bool 型的Series取值,bool型的 Series 和 True/False 進行比較,可用於數據過濾)
series.mean() 自動過濾缺失值,再求平均值
df.pivot_table(index=“列名1”, values=“列名2”/[“列名2”,“列名3”,…], aggfunc=聚合函數) 實現分組、聚合處理;index指定分組依據的列;values指定對哪幾個列做聚合統計運算;aggfunc指定用於series的聚合函數。
df.dropna(axis=1) / df.dropna(axis=‘column’) 刪除存在缺失值的列
df.dropna(axis=0, subset=[‘columns1’, ‘columns2’, …]) 刪除指定列存在缺失值的記錄
df.duplicated(subset=None, keep=‘first’) 返回一個表示記錄是否重複的 bool 型 Series。subset 指定比較的列,keep默認爲 first ,表示將首次出現的重複記錄標記爲 False ,其它位置則爲 True;keep = last,則表示只將重複值最後出現的位置標記爲 False;keep=False,則表示將所有重複的記錄均標記爲 True。
df.drop_duplicates(subset=None, keep=‘first’, inplace=False) 返回去重的dataframe,subset指定去重的列,keep可以爲’first’、‘last’、False,分別代表保留重複項首次出現的記錄、最後一次出現的記錄,False則表示刪除任何重複記錄
df.sortvalues(‘列名’, inplace=False, ascending=True) 返回一個新的升序dataframe
reset_index(drop=True) 用於排序後重置索引
.loc[行索引,列索引] 獲取指定值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章