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

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

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

题目如下:

9a8bd009fac2401f92b75505854a8c90.jpeg

455d05eaeca54a34b9e34931c72139e4.jpeg

首先,模拟数据:

importpandas aspd

importnumpy asnp

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

9783c12d08b84692bb054c1adea9fc66.png

题目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']= 0df

e88187b2ae1c493aad30e8e43d6a7c41.png

题目2:将age列的缺失值用age列的均值代替

# 使用fillna填补缺失值即可

df_mean = df[ 'age'].mean

df[ 'age'].fillna(df_mean,inplace=True)

df

bfdea6e1003a4990bb8d613c4a569486.png

题目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

8215a8f0ae76426794f5d472d2352fd9.png

题目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( lambdax: 'A'ifx< 15else'B')

df

8595e5bf420347e2b05e2d02981bcf0f.png

题目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)

bcf70f3f04bd4e23ac5ea7880732a0ab.png

-----------------返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值