社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

小蚊子数据分析 • 4 年前 • 853 次点击  

最近无意看到一份关于数据分析的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
 
853 次点击