实验09 Pandas函数应用
实验学时:2学时
实验类型:验证
实验要求:必修
一、实验目的
- 掌握pandas函数应用的方法:pipe()、apply()和applymap()。
- 能编写自定义函数。
- 能使用pandas函数应用调用自定义函数解决数据分析实际问题。
二、实验要求
利用pandas函数应用的方法解决数据分析实际问题,能编写自定义函数。
三、实验内容
任务1.使用pandas创建5行3列的1-10之间的随机数数据帧,自定义以下函数,调用这些函数求:
- 所有值加2
- 各行、各列的平均值,
- 对第2列的所有值乘以3,
- 求各列最大值与最小值的差。
用python的Pandas库编程实现。
def cheng(cX):
return cX*3
def sub(tempX):
return tempX.max()-tempX.min()
def addr(elm1,elm2):
return elm1+elm2
任务2. 给定数据文件:mydata.xls,使用pandas函数求出:
(1)每门课程的总分、平均分、最高分、最低分、及格人数、不及格人数;
(2)每位学生的总分;
(3)按总分排出名次;
(4)每门课程的及格率、不及格率及优秀率(90或90分以上)、标准差;
(5)按性别分组,求出平均值。
用python编程实现。
任务3. 给定数据文件:sporter.xlsx,使用pandas函数将统计的运动员基本信息进行归类,筛选出所有篮球运动员的基本信息,以统计篮球运动员的如下几个测试指标:
(1)统计篮球运动员的平均年龄、身高、体重。
(2)统计男篮球运动员的年龄、身高、体重的极差值。
(3)统计篮球运动员的体质指数(BMI值)。
体质指数(BMI)=体重(kg)÷ 身高2
用python编程实现。
test9.py
import pandas as pd
import numpy as np
def cheng(cX):
return cX * 3
def sub(tempX):
return tempX.max() - tempX.min()
def addr(elm1, elm2):
return elm1 + elm2
def task1():
# 创建一个 5x3 的 DataFrame,其中包含 1 到 10 之间的随机值
np.random.seed(42) # 设置种子以便重现结果
data = np.random.randint(1, 11, size=(5, 3))
df = pd.DataFrame(data, columns=['列1', '列2', '列3'])
# 1:在DataFrame中的所有值上加2
df_added_2 = df.applymap(lambda x: addr(x, 2))
# 2:计算每行和每列的平均值
row_means = df.mean(axis=1)
col_means = df.mean()
# 3:将第二列的所有值乘以3
df_col2_multiplied = df.copy()
df_col2_multiplied['列2'] = cheng(df_col2_multiplied['列2'])
# 4:计算每列最大值与最小值的差
col_diff = df.apply(sub)
# 显示结果
print("原始DataFrame:")
print(df)
print("\n任务1:所有值加2")
print(df_added_2)
print("\n任务2:行平均值")
print(row_means)
print("\n任务2:列平均值")
print(col_means)
print("\n任务3:第二列乘以3")
print(df_col2_multiplied)
print("\n任务4:每列最大值与最小值的差")
print(col_diff)
def task2():
# 读取 Excel 文件
df = pd.read_excel('mydata.xlsx', skiprows=3, skipfooter=2)
# 检查数据列名
print(df.columns)
# 为了方便演示,我仅选择部分列进行示例
selected_columns = ['姓名', '性别', '高等数学', '大学英语', '操作系统', 'Python语言', '计算机组成原理']
# 检查数据是否包含所需的列
if set(selected_columns).issubset(df.columns):
# (1) 每门课程的统计信息
course_stats = df[selected_columns[2:]].agg(
['sum', 'mean', 'max', 'min', lambda x: sum(x >= 60), lambda x: sum(x < 60)])
course_stats.index = ['总分', '平均分', '最高分', '最低分', '及格人数', '不及格人数']
# (2) 每位学生的总分
df['总分'] = df[selected_columns[2:]].sum(axis=1)
# (3) 按总分排名
df['总分排名'] = df['总分'].rank(ascending=False, method='min')
# (4) 每门课程的统计信息(及格率、不及格率、优秀率、标准差)
course_stats_2 = df[selected_columns[2:]].agg(['mean', lambda x: sum(x >= 60) / len(x),
lambda x: sum(x < 60) / len(x), lambda x: sum(x >= 90) / len(x),
'std'])
course_stats_2.index = ['平均分', '及格率', '不及格率', '优秀率', '标准差']
# (5) 按性别分组,求平均值
gender_means = df.groupby('性别')['总分'].mean()
# 显示结果
print("(1) 每门课程的统计信息:")
print(course_stats)
print("\n(2) 每位学生的总分:")
print(df[['姓名', '总分']])
print("\n(3) 按总分排名:")
print(df[['姓名', '总分', '总分排名']].sort_values(by='总分排名'))
print("\n(4) 每门课程的统计信息(及格率、不及格率、优秀率、标准差):")
print(course_stats_2)
print("\n(5) 按性别分组的平均值:")
print(gender_means)
else:
print("数据缺少所需的列。请检查列名是否正确。")
def task3():
# 读取 Excel 文件
df = pd.read_excel('sporter.xlsx')
# 筛选出篮球运动员
basketball_players = df[df['项目'] == '篮球'].copy()
# (1) 统计篮球运动员的平均年龄、身高、体重
avg_age = basketball_players['年龄(岁)'].mean()
avg_height = basketball_players['身高(cm)'].mean()
avg_weight = basketball_players['体重(kg)'].mean()
# (2) 统计男篮球运动员的年龄、身高、体重的极差值
male_basketball_players = basketball_players[basketball_players['性别'] == '男']
range_age = male_basketball_players['年龄(岁)'].max() - male_basketball_players['年龄(岁)'].min()
range_height = male_basketball_players['身高(cm)'].max() - male_basketball_players['身高(cm)'].min()
range_weight = male_basketball_players['体重(kg)'].max() - male_basketball_players['体重(kg)'].min()
# (3) 统计篮球运动员的体质指数(BMI值)
basketball_players.loc[:, 'BMI'] = basketball_players['体重(kg)'] / (basketball_players['身高(cm)'] / 100) ** 2
# 显示结果
print(f"(1) 篮球运动员的平均年龄:{avg_age:.2f} 岁")
print(f" 篮球运动员的平均身高:{avg_height:.2f} cm")
print(f" 篮球运动员的平均体重:{avg_weight:.2f} kg")
print(f"\n(2) 男篮球运动员的年龄极差:{range_age} 岁")
print(f" 男篮球运动员的身高极差:{range_height} cm")
print(f" 男篮球运动员的体重极差:{range_weight} kg")
print("\n(3) 篮球运动员的体质指数(BMI值):")
print(basketball_players[['姓名', '性别', 'BMI']])
if __name__ == '__main__':
task1()
task2()
task3()
标签:basketball,df,09,players,篮球,可视化,总分,print,Pandas
From: https://www.cnblogs.com/IvanKK/p/17936741