Pandas第一次作业
任务目标:
1,创建一个四行五列的DataFrame,行索引为学生姓名,列索引为学科名称,内容为学生在各学科中取得的成绩;
2,因为数学老师把体育课都占了,导致体育课没有成绩。先将体育课成绩都设为0,然后删除该列;
3,部分学生选修了统计学和日语这两门课程,要求创建一个新的DataFrame,用来保存选修课的成绩;
4,将选修课成绩与原DataFrame合并,并计算该学生在本学期的总成绩。
代码主要涉及DataFrame的创建、修改、删除、合并。
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 24 17:15:50 2021
@author: 清弦墨客(聆听)
"""
import numpy as np
import pandas as pd
stu_names = ["林更新", "胡歌", "金世佳", "丑娟"]
stu_subjuects = ["Chinese", "Math", "English", "Programming", "Physics"]
# 各科成绩随机创建,并形成一个4*5的数组
data = np.array(np.random.randint(50,100,20).reshape(4, 5))
# 用ndarray数组生成DataFrame
df = pd.DataFrame(data, index=stu_names, columns=stu_subjuects)
#print(df)
# 将体育课成绩都设为0分
df["Physics"] = 0
#print(df)
# 删除体育课的成绩
del df["Physics"]
#print(df)
# 用列表创建学生选修成绩表,其实转换为ndarray也是一样的,形成一个4*2的数组再转换为DataFrame
# 用字典也可以创建,不过稍微麻烦点,这里就不展示了。需要注意的是,使用字典创建df时,key对应列名。
elective = [[85, np.nan, np.nan, 80],[np.nan, 69, 95, np.nan]]
df_elective = pd.DataFrame(np.array(elective).reshape(4,2),
index=stu_names,
columns=["Statistics", "Japanese"])
#print(df_elective)
# 使用concat()方法将选修课成绩添加到df中,因为是横向添加,所以axis=1
df = pd.concat([df, df_elective], axis=1)
#print(df)
# 在df中添加一列用来计算总分
df["total points"] = df.sum(axis=1).astype('int')
print(df)
代码最终结果:
Chinese Math English Programming Statistics Japanese total points
林更新 96 64 82 80 85.0 NaN 407
胡歌 72 96 60 63 NaN 80.0 371
金世佳 87 68 98 72 NaN 69.0 394
丑娟 98 60 83 97 95.0 NaN 433