Python数据分析pandas第一次作业20200902

练习1 利用pandas创建Excel表格

1.1 创建学生成绩表1

通过 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
在这里插入图片描述

1.2 选修成绩表

import pandas as pd
import numpy as np

#利用dict创建DataFrame
ele_names = ["胡歌","林更新","金世佳","丑娟"]
ele_data_dict = {
    
    
    "统计学":[85,np.nan,76,80],
    "日语":[np.nan,69,95,np.nan]
}

df = pd.DataFrame(ele_data_dict,index=ele_names)
print(df)
# 保存文件:
df.to_excel("选修成绩表.xlsx")

结果:选修成绩表.xlsx

在这里插入图片描述

练习2

读取两表数据,注意:此时需指定行索引为第一列。

#!/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
'''

练习3

• 因为体育课全被数学老师抢了,所以学生成绩表中的体育期末成绩全为空,将其删除。
• 学生成绩表.xlsx 中没有选修的数据,将 选修成绩表.xlsx 的数据添加到 学生成绩表 中。
• 可以观察出来,此时的数据每个人都是五门课程,现在需添加一列 总成绩 来求得每位学生的总成绩。(pandas中有df.sum(axis=1)来进行求每行的数据之和,并且gnan跳过。)

最终的数据如下:
在这里插入图片描述
再将该数据保存到 总表.xlsx 中
在这里插入图片描述

3.1 因为体育课全被数学老师抢了,所以学生成绩表中的体育期末成绩全为空,将其删除。

df_file01 = pd.read_excel("学生成绩表.xlsx",sheet_name = 0, header=0,index_col=0 )
print(df_file01) #ImportError: Missing optional 

'''
    语文  数学  英语  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
'''
del df_file01["体育"]
print(df_file01)
'''
    语文  数学  英语  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
'''

courses02 = ['姓名','统计学', '日语']
df_file02 = pd.read_excel("选修成绩表.xlsx", sheet_name = 0,index_col=0 )
print(df_file02)
'''
    姓名   统计学    日语
胡歌  85.0   NaN
林更新   NaN  69.0
金世佳  76.0  95.0
'''

3.2 学生成绩表.xlsx 中没有选修的数据,将选修成绩表.xlsx 的数据添加到学生成绩表中

# 列拼接,默认是并集
df_file01 = pd.concat([df_file01,df_file02],axis=1)
print(df_file01)
'''
语文  数学  英语  Python   马克思  C++   统计学    日语
胡歌   87  74  98      84  91.0   88  85.0   NaN
林更新  79  69  61      99  92.0   77   NaN  69.0
金世佳  84  84  94      66   NaN   66  76.0  95.0
丑娟   90  60  72      90  88.0   90  80.0   NaN
'''

3.3 可以观察出来,此时的数据每个人都是十门课程,现在需添加一列 总成绩 来求得每位学生的总成绩。(pandas中有df.sum(axis=1)来进行求每行的数据之和,并且gnan跳过。)

# 现在需添加一列 总成绩 来求得每位学生的总成绩。(pandas中有df.sum(axis=1)来进行求每行的数据之和,并且gnan跳过。)
df_sum = df_file01.sum(axis=1)
print(type(df_sum)) #<class 'pandas.core.series.Series'>
'''
胡歌     607.0
林更新    546.0
金世佳    565.0
丑娟     570.0
'''
print(df_sum.index) #Index(['胡歌', '林更新', '金世佳', '丑娟'], dtype='object')
print(df_sum.values) # df_sum.values

# 把Series转换为DataFrame
#df_sum_fr = pd.DataFrame(df_sum.values,index=list(df_sum.index),columns=["总成绩"])
#print(df_sum_fr)

# 合并为总表
df_file01.insert(df_file01.shape[1],"总成绩",df_sum.values,allow_duplicates=False)
print(df_file01)
'''
     语文  数学  英语  Python   马克思  C++   统计学    日语    总成绩
胡歌   87  74  98      84  91.0   88  85.0   NaN  607.0
林更新  79  69  61      99  92.0   77   NaN  69.0  546.0
金世佳  84  84  94      66   NaN   66  76.0  95.0  565.0
丑娟   90  60  72      90  88.0   90  80.0   NaN  570.0
'''
df_file01.to_excel('总表.xlsx')

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Narutolxy/article/details/108371682