Py学习  »  Python

一道经典的Python数据分析笔试题

小蚊子数据分析 • 3 年前 • 830 次点击  

最近无意看到一份关于数据分析的Python笔试题,做起来还是很有意思的,特意自己动手做了一下,和大家分享一下,希望大家也可以跟着练习。

题目如下:


首先,模拟数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({'order_no':['order_18213','order_16061','order_10176','order_11923','order_18791',
                               'order_12534','order_14502','order_14488''order_15488','order_18118'],
                  'province':['山东','四川','福建','广东','广东','广东','广东','山东','湖南' ,'福建'],
                   'gender':['女','女','女','女','男','女','男','男','女','女'],
                   'age':[29.0,27.0,25.0,25.0,np.nan,27.0,25.0,27.0,np.nan,27.0],
                   'education':['本科','研究生','本科','研究生','研究生','本科','大专','大专','本科','大专'],
                   'overdue_days':[0,17,0,0,12,20,22,32,0,2],
                   'info_label':[0 ,1,0,0,1,1,1,1,0,1]
                  })
df
结果如下:

题目1:将gender列中的 男 ,女分别替换为数值1、0
方法1:
df['gender']=df['gender'].map({'男':1,'女':0})
方法2:

df['gender']=df['gender'].replace(['男','女'],[1,0])

方法3:



    
df.loc[df['gender']=='男','gender']=1
df.loc[df['gender']=='女','gender']=0
df
结果如下:

题目2:将age列的缺失值用age列的均值代替
# 使用fillna()填补缺失值即可
df_mean = df['age'].mean()
df['age'].fillna(df_mean,inplace=True)
df

题目3:计算各省的平均逾期率
# 逾期率=逾期客户/全部客户
# 计算各省的逾期用户
df_overdue = df.groupby('province')['info_label'].sum().reset_index()
df_overdue.columns=['province','overdue_cnt']
# 计算各省的用户数
df_all = df.groupby('province')['info_label'].count().reset_index()
df_all.columns=['province','all_cnt']
# 合并各省逾期用户及各省用户数形成新的报表df1
df1 = pd.merge(df_overdue, df_all, on = ['province'], how = 'left')
# 得到各省的逾期率
df1['overdue_pec'] = df1['overdue_cnt']/df1['all_cnt']
df1
结果如下:

题目4:计算广东省男性用户的逾期率

# 计算广东省的逾期男性用户
overdue_pec_gd = df[(df['province']=='广东') & (df['gender'] == 1)]['info_label'].sum()/df[(df['province']=='广东') & (df['gender'] == 1)]['info_label'].count()
print(overdue_pec_gd)


题目5:在df里面新增1列overdue_grade,其中overdue_days<15时,overdue_grade取值为A,overdue_days>=15时 overdue_grade取值为B



    
df['overdue_grade'] = df['overdue_days'].apply(lambda x: 'A' if x<15 else 'B')
df
结果如下:

题目6:将类别型变量education 转化为哑变量(Dummy Variables),并与原df在axis=1 方向上合并,然后删除初始的education列
# 使用get_dummies()进行one-hot变量,然后进行数据合并concat(),删除使用drop()
df=pd.concat((df,pd.get_dummies(df['education'])),axis=1)
df.drop(['education'],axis=1)

结果如下:


-----------------

希望系统、快速学习Python数据分析知识,可以学习

数据分析专家@文彤老师

跟文彤老师学Python数据分析 》系列视频课程

包含以下三门课程

Python数据分析--玩转Pandas

玩转Python统计分析

Python数据分析--玩转数据可视化

如有问题也可添加课程助理微信号咨询,添加时请注明咨询课程

参加课程学习,可享受6折优惠

购买课程直接点击文末“阅读原文”进入即可

     

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/61860
 
830 次点击