数据分析 | 您所在的位置:网站首页 › Excel数据清洗实验报告 › 数据分析 |
上一节课介绍了 Pandas 的基本用法,这一章节我们通过对 “泰坦尼克号” 幸存者进行数据分析,来进一步的学习 pandas。 titanic_train.csv 网盘链接:链接:https://pan.baidu.com/s/1hGc19QAGV6H-hDtOdz-GpQ 提取码:sgu8 ![]() ![]() 在 pandas 中,使用 NaN 表示数据为空,表示数据缺失 使用 .isnull()函数判断一列数据是否为空 age = titanic_survival["Age"]age_is_null = pd.isnull(age)print(age_is_null)![]() 查看空数据情况 age_null_true = age[age_is_null]print (age_null_true)![]() 上图显示出,Age 这一列 ,长度 177, 数据类型 float64 也可以直接使用len()来判断长度 age_null_count = len(age_null_true)print(age_null_count)>>> 177在我们处理数据过程中,如果数据中包含 nan 会导致计算出错,下面来演示计算泰坦尼克号幸存者的平均年龄 mean_age = sum(titanic_survival["Age"]) / len(titanic_survival["Age"])print (mean_age)>>>nan如上所示,在计算之前我们需要过滤掉空数据 good_ages = titanic_survival["Age"][age_is_null == False]print (good_ages)我们知道第 888 号数据为空,下图第888号数据被过滤 ![]() 过滤掉空数据,再计算均值: correct_mean_age = sum(good_ages) / len(good_ages)print (correct_mean_age)>>> 29.69911764705882我们也可以使用.mean()来计算均值,可以过滤空数据 correct_mean_age = titanic_survival["Age"].mean()print (correct_mean_age)>>>29.69911764705882 #结果和上式相同一共有3个种类的舱位,下面计算每种舱位的平均价格 passenger_classes = [1, 2, 3]fares_by_class = {}for this_class in passenger_classes: pclass_rows = titanic_survival[titanic_survival["Pclass"] == this_class] pclass_fares = pclass_rows["Fare"] fare_for_class = pclass_fares.mean() fares_by_class[this_class] = fare_for_classprint (fares_by_class)>>> {1: 84.1546875, 2: 20.662183152173913, 3: 13.675550101832993}计算 3 个舱位的生还概率,可以使用 .pivot_table(index, values, aggfunc)方法 index:索引列 values:目标列(待计算) aggfunc:使用的方法 我们先看一下原表,0 代表死亡,1 代表生还,Pclass 舱位等级,分 1 ,2, 3 三个等级的舱位,以 Pclass 为索引,以 Survived 为值,计算生还概率 ![]() ![]() 舱位选择的平均年龄 passenger_age = titanic_survival.pivot_table(index="Pclass", values="Age")print(passenger_age)![]() 以 上船距离为索引,费用和生还人数为值 port_stats = titanic_survival.pivot_table(index="Embarked", values=["Fare","Survived"], aggfunc=np.sum)print(port_stats)![]() 令 axis=1 或者 axis=‘columns’,可以删除 含有 null 的列 drop_na_columns = titanic_survival.dropna(axis=1)new_titanic_survival = titanic_survival.dropna(axis=0,subset=["Age", "Sex"])print (new_titanic_survival)![]() 如下图,通过对比可以发现,“Age”列的第 888 行为空,被去除 ![]() 生还者按照年龄降序排列 new_titanic_survival = titanic_survival.sort_values("Age",ascending=False)print (new_titanic_survival[0:10]) #显示前10个数据![]() 重置索引: titanic_reindexed = new_titanic_survival.reset_index(drop=True)print(titanic_reindexed.loc[0:10])![]() 返回第 100 个乘客的信息 def hundredth_row(column): # Extract the hundredth item hundredth_item = column.loc[99] return hundredth_item# Return the hundredth item from each columnhundredth_row = titanic_survival.apply(hundredth_row)print (hundredth_row)![]() 表的每列中为空的个数 def null_count(column): column_null = pd.isnull(column) null = column[column_null] return len(null)column_null_count = titanic_survival.apply(null_count)print (column_null_count)![]() 分别计算成年与未成年人的生还概率 首先,对乘客进行分类,以 18 岁为标准 def generate_age_label(row): age = row["Age"] if pd.isnull(age): return "unknown" elif age |
CopyRight 2018-2019 实验室设备网 版权所有 |