大数跨境
0
0

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

一道经典的Python数据分析笔试题 漫画数据分析
2020-04-15
0

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

结果如下:

-----------------
长按识别下方二维码,并关注公众号


1.回复“PY”领取1GB Python数据分析资料

2.回复“BG”领取5GB 名企数据分析报告

【声明】内容源于网络
0
0
漫画数据分析
分享Excel、SQL、Python数据分析心得与方法
内容 224
粉丝 0
漫画数据分析 分享Excel、SQL、Python数据分析心得与方法
总阅读13
粉丝0
内容224