通过 Pandas 创建 学生成绩表的 excel 文件 。参考数据如下(可自己构建)
#!/user/bin/env python #-*-coding: utf-8-*- #@Time : 2020/9/38:41 #@Author : GodSpeed #@File : pandas第一次作业01_03.py.py #@Software : PyCharm import pandas as pd import numpy as np # 创建DataFrame # pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False) # 以行的方式逐步增加 courses = ['语文', '数学', '英语', 'Python'] data1 = np.array([[87,74,98,84]]) data_style_c = pd.DataFrame(data1,index=["胡歌"],columns=courses) #print(data_style_c) #插入行loc data_style_c.loc["林更新"] = [79,69,61,99] print(data_style_c) data_style_c.loc["金世佳"] = [84,84,94,66] print(data_style_c) ##插入行append data_jsj = pd.DataFrame(np.array([[90,60,72,90]]),index=["丑娟"],columns=courses) print(data_jsj) data_style_c = data_style_c.append(data_jsj) print(data_style_c) #插入列 stu_names = ["胡歌","林更新","金世佳","丑娟"] sports_scores_dict = { "体育":[np.nan,np.nan,np.nan,np.nan], "马克思":[91,92,np.nan,88] } sports_scores = pd.DataFrame(sports_scores_dict,index=stu_names) print(sports_scores) # 列拼接,默认是并集 data_style_c = pd.concat([data_style_c,sports_scores],axis=1) print(data_style_c) #allow_duplicates: 是否允许列名重复,选择Ture表示允许新的列名与已存在的列名重复 data_style_c.insert(data_style_c.shape[1],"C++",[88,77,66,90],allow_duplicates=False) print(data_style_c) # 保存文件: data_style_c.to_excel("学生成绩表.xlsx")结果:学生成绩表.xlsx
结果:选修成绩表.xlsx
读取两表数据,注意:此时需指定行索引为第一列。
#!/user/bin/env python #-*-coding: utf-8-*- #@Time : 2020/9/38:49 #@Author : GodSpeed #@File : pandas第一次作业02.py #@Software : PyCharm import numpy as np import pandas as pd ''' pd.read_excel(path, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False,dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds) 1.path --> xlsx的存储路径 2.sheet_name --> 读取工作表(sheet)名称 0表示第一个表 3.header --> 指定前几行作为列名(指定数据表的表头,默认值为0,即将第一行作为表头。) 4.names --> 自定义列名 5.index_col --> 用作索引的列 6.usecols --> 读取指定的列 8.skiprows --> 跳过特定行 9.nrows --> 读取指定行数 ''' df_file01 = pd.read_excel("学生成绩表.xlsx",sheet_name = 0, header=0,index_col=0 ) print(df_file01) #ImportError: Missing optional dependency 'xlrd'. #解决方法 #安装xlrd #pip install xlrd -i https://pypi.tuna.tsinghua.edu.cn/simple ''' 语文 数学 英语 Python 体育 马克思 C++ 胡歌 87 74 98 84 NaN 91.0 88 林更新 79 69 61 99 NaN 92.0 77 金世佳 84 84 94 66 NaN NaN 66 丑娟 90 60 72 90 NaN 88.0 90 ''' df_file02 = pd.read_excel("选修成绩表.xlsx", sheet_name = 0,header=0,index_col=0) print(df_file02) ''' 统计学 日语 胡歌 85.0 NaN 林更新 NaN 69.0 金世佳 76.0 95.0 丑娟 80.0 NaN ''' df_file01 = pd.concat([df_file01,df_file02],join='inner',axis=1) print(df_file01) ''' 语文 数学 英语 Python 体育 马克思 C++ 统计学 日语 胡歌 87 74 98 84 NaN 91.0 88 85.0 NaN 林更新 79 69 61 99 NaN 92.0 77 NaN 69.0 金世佳 84 84 94 66 NaN NaN 66 76.0 95.0 丑娟 90 60 72 90 NaN 88.0 90 80.0 NaN '''• 因为体育课全被数学老师抢了,所以学生成绩表中的体育期末成绩全为空,将其删除。 • 学生成绩表.xlsx 中没有选修的数据,将 选修成绩表.xlsx 的数据添加到 学生成绩表 中。 • 可以观察出来,此时的数据每个人都是五门课程,现在需添加一列 总成绩 来求得每位学生的总成绩。(pandas中有df.sum(axis=1)来进行求每行的数据之和,并且gnan跳过。)
最终的数据如下: 再将该数据保存到 总表.xlsx 中