panda经典四道题期末考核分享

第一题

(10分)

某班级部分学生的预处理成绩如下:

杭念云,腾望舒,邢苍,祈思慧,端木尧,贸柳,越朝,空晴虹,王白筠,蒙思雅

88,67,56,90,75,76,74,79,-20,69

1、使用以上数据创建一个Series(姓名为标签,成绩为值)

2、将小于0的成绩改为0

3、假设他们的平时分都是80分,最终成绩 = 平时分 * 30% + 成绩 * 70%,将Series中的成绩都转换为最终成绩

4、按最终成绩按从低到高排序

5、求平均成绩

最终打印:最后的series内容和平均成绩

df = pd.Series([88,67,56,90,75,76,74,79,-20,69],index=['杭念云','腾望舒','邢苍','祈思慧','端木尧','贸柳','越朝','空晴虹','王白筠','蒙思雅'])
def func(x):
    if x<=0:
        x =0
    return x
df = df.apply(func)
def her(x):
    x = 85*0.3+x*0.7
    return x
df = df.apply(her)
df = df.sort_values(axis=0)
print(df)
df = df.sort_values(axis=0)
print(df)

王白筠 25.5
邢苍 64.7
腾望舒 72.4
蒙思雅 73.8
越朝 77.3
端木尧 78.0
贸柳 78.7
空晴虹 80.8
杭念云 87.1
祈思慧 88.5
dtype: float64
df2 = df.mean()
print(df2)
72.67999999999999

第二题

(10分)

一位市民一个月的部分花销清单如下。

1、使用以下字典创建一个DataFrame

2、求3日的总支出

3、求微信的总使用金额

4、去掉所有现金支付的账单

5、去掉日期和账户列

6、先按类别排序,再按金额从小到大排序

最终打印:2、3的结果和4、5、6处理后的DataFrame内容

d1 = {'日期':[1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,5,5,5,5,6,6,6,6,6],
'类别':['服装','食品','日用','日用','交通','日用','娱乐','食品','食品','食品','娱乐','日用','服装','交通','医疗','食品','人情','娱乐','交通','食品','娱乐','服装','日用','食品','医疗','食品'],
'金额':[120,14,52,3,8,12,60,18,5,12,42,6,99,5,55,13,100,65,5,16,30,199,31,20,28,14],
'账户':['信用卡','微信','微信','微信','支付宝','微信','支付宝','微信','微信','微信','信用卡','支付宝','支付宝','支付宝','微信','现金','现金','信用卡','现金','微信','信用卡','信用卡','微信','现金','现金','微信']}
​
a = pd.DataFrame(d1)
b =(a.loc[a['日期']<=3])
c = pd.DataFrame(b)
print(c['金额'].sum())
456
b =(a.loc[a['账户']=='微信'])
c = pd.DataFrame(b)
print(c['金额'].sum())
232
d1 =(a.loc[a['账户']!='现金'])
d1 = pd.DataFrame(d1)
d1 = d1.drop(['日期','账户'],axis=1)
d1 = d1.sort_values(['类别','金额'])
print(d1)
类别   金额

13 交通 5
4 交通 8
14 医疗 55
20 娱乐 30
10 娱乐 42
6 娱乐 60
17 娱乐 65
3 日用 3
11 日用 6
5 日用 12
22 日用 31
2 日用 52
12 服装 99
0 服装 120
21 服装 199
8 食品 5
9 食品 12
1 食品 14
25 食品 14
19 食品 16
7 食品 18
第三题(10分)

某管理系统的人员信息如下。

1、使用以下字典创建一个DataFrame

2、用‘不明’来填充姓名中的空值

3、计算平均年龄(需排除异常年龄),并用平均年龄替换掉超过120的年龄值

4、将性别中的m、f替换为男、女

5、密码必须由纯数字组成,如果不是,替换为’密码不合法’

最终打印:处理完毕后的DataFrame内容

d2 = {'ID':[1,2,3,4,5,6,7,8],
'姓名':['夏以蕊','翟天曼','苏安萱','覃英耀','黎梅风',None,'覃英耀','伏灵雨'],
'年龄':[20,182,19,21,20,19,21,20],
'性别':['女','女','f','男','m','男','男','女'],
'密码':['123456','123abc','1234','xyz123','88888888','6666','qweasd123','666666']
}
d2 = pd.DataFrame(d2)
d2 = d2[:]
d2['姓名'] = d2['姓名'].fillna('未知')#位置替代None
def func(x):
    if x['年龄']>=120:
        x['年龄'] = Nonereturn x
d2 = d2.apply(func,axis=1)
d2['年龄'] = d2['年龄'].fillna(d2['年龄'].mean())
def func1(x):
    if x['性别']=='f':
        x['性别'] = '女'return x
d2 = d2.apply(func1,axis=1)
def func2(x):
    if x['性别']=='m':
        x['性别'] = '男'return x
d2 = d2.apply(func2,axis=1)
#密码这里我不会了!!!!!!
def isDigit(x):
   for j in x['密码']:
    if isinstance(j,str)==True:
        x['密码']='密码不合法'
    return x

d2 = d2.apply(isDigit,axis=1)
print(d2)

ID 姓名 年龄 性别 密码
0 1 夏以蕊 20.0 女 123456
1 2 翟天曼 20.0 女 123abc
2 3 苏安萱 19.0 女 1234
3 4 覃英耀 21.0 男 xyz123
4 5 黎梅风 20.0 男 88888888
5 6 未知 19.0 男 6666
6 7 覃英耀 21.0 男 qweasd123
7 8 伏灵雨 20.0 女 666666

第四题

(10分)

目前国内新冠疫情的部分数据如下。

1、使用以下字典分别创建两个DataFrame

2、陕西省12月29日~31日分别新增本土155例、165例、174例,创建一个DateFrame表示这三条数据,并纵向串接到第二个DataFrame中

3、将两个DataFram按照省份进行合并(内连接)

4、将表按日期排序(从前到后)

5、去掉累计确诊一列

6、重塑出一个DataFrame,行标签是日期,列标签是省份,现有确诊和新增本土是填充值

7、用0替代所有的空值

最终打印:处理完毕后的DateFrame内容

d3 = {'省份':['北京','浙江','山东','陕西','四川','云南','广东','广西'],
    '现有确诊':[12,509,24,1765,36,79,124,247],
    '累计确诊':[1215,2046,1047,2530,1329,1823,3486,641]
}
d4 = {'日期':['12-20','12-21','12-22','12-23','12-24','12-25','12-26','12-27','12-28'],
    '省份':['广东','广东','广西','陕西','云南','陕西','广西','浙江','陕西',],
    '新增本土':[6,2,4,52,4,157,7,1,151]
     }
#1、使用以下字典分别创建两个DataFrame
demo01 = pd.DataFrame(d3)
demo02 = pd.DataFrame(d4)
# 2、陕西省12月29日~31日分别新增本土155例、165例、174例,创建一个DateFrame表示这三条数据,并纵向串接到第二个DataFrame中
d5 = {'日期':['12-29','12-30','12-31'],
    '省份':['陕西','陕西','陕西'],
    '新增本土':[155,165,174]
     }
demo03 = pd.DataFrame(d5)
demo02 = pd.concat([demo02,demo03])
#3、将两个DataFram按照省份进行合并(内连接)
demo = pd.merge(demo01,demo02,on='省份')# 4、将表按日期排序(从前到后)
demo = demo.sort_values(['日期'])
# 5、去掉累计确诊一列
demo = demo.drop(['累计确诊'],axis=1)
# 6、重塑出一个DataFrame,行标签是日期,列标签是省份,现有确诊和新增本土是填充值
demo = demo.pivot(index='日期',columns='省份',values=['现有确诊','新增本土'])
# 7、用0替代所有的空值
demo = demo.fillna(0)
print(demo)
   现有确诊                              新增本土                      

省份 云南 广东 广西 浙江 陕西 云南 广东 广西 浙江 陕西
日期
12-20 0.0 124.0 0.0 0.0 0.0 0.0 6.0 0.0 0.0 0.0
12-21 0.0 124.0 0.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0
12-22 0.0 0.0 247.0 0.0 0.0 0.0 0.0 4.0 0.0 0.0
12-23 0.0 0.0 0.0 0.0 1765.0 0.0 0.0 0.0 0.0 52.0
12-24 79.0 0.0 0.0 0.0 0.0 4.0 0.0 0.0 0.0 0.0
12-25 0.0 0.0 0.0 0.0 1765.0 0.0 0.0 0.0 0.0 157.0
12-26 0.0 0.0 247.0 0.0 0.0 0.0 0.0 7.0 0.0 0.0
12-27 0.0 0.0 0.0 509.0 0.0 0.0 0.0 0.0 1.0 0.0
12-28 0.0 0.0 0.0 0.0 1765.0 0.0 0.0 0.0 0.0 151.0
12-29 0.0 0.0 0.0 0.0 1765.0 0.0 0.0 0.0 0.0 155.0
12-30 0.0 0.0 0.0 0.0 1765.0 0.0 0.0 0.0 0.0 165.0
12-31 0.0 0.0 0.0 0.0 1765.0 0.0 0.0 0.0 0.0 174.0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南师大蒜阿熏呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值