1. 现有如下图所示的学生信息,请根据图中的信息完成以下操作
(1)根据年级信息为分组键,对学生信息进行分组,并输出大一学生信息。 (2)分别计算出四个年级中身高最高的同学。 (3)计算大一学生与大三学生的平均体重
2. 现有如下图所示的两组数据,其中 A 组中 B 列数据存在缺失值,并且该列数据为 int 类型,B 组中的 数据均为 str 类型。接下来,请对这些数据进行以下操作:
(1)使用 DataFrame 创建这两组数据。 (2)现在需要使用 B 组中的数据对 A 组中的缺失值进行填充并保持数据类型一致。 (3)将合并后 A 组中索引名为 key 的索引重命名为 D。
3. 中国已经成为了体育大国,从 2008 年的夏季奥运会到 2022 年的冬季奥运会,中国健儿拿下数百枚 奖牌,让国人扬眉吐气,向世界证明了中国的实力。当前,我国体育正处于从体育大国向体育强国迈进 的重要时期,奋斗依然是不变的主题。根据数据完成以下要求: (1)计算中国男篮、女篮运动员的平均身高与平均体重。 (2)统计中国篮球运动员的年龄分布情况。 (3)计算中国篮球运动员的体质指数。
4. 有一组关于北京和天津地区的统计信息,这些数据中都或多或少存在一些问题,比如重复的数据、缺失 的数据。请使用 Pandas 对爬取的数据进行预处理操作,具体包括: (1)检查重复数据,一旦发现有重复的数据,就需要将其进行删除。 (2)检查缺失值,为了保持数据的完整性,通常会使用某个数据填充 (3)检查异常值,一旦发现数据中存在异常值,通常先要对照原始数据进一步确认,如果是错误的数值,则 直接使用正确的数值进行替换即可。 (4)对北京和天津数据进行合并。
5. 给定一个餐饮订单数据文件(meal_order_detail.xlsx),该文件包含了订单的详细信息,如订单 ID、 菜品 ID、菜品名称、数量、金额等。请使用 Pandas 库完成以下任务: 1.读取 excel 文件中的数据到 DataFrame 中。 2.使用索引操作选择特定列的数据。 3.对 DataFrame 中的数据进行算术运算,如计算订单的总金额。 4.对 DataFrame 进行排序,如按照订单金额从高到低排序。 5.使用统计功能,计算各个菜品的销售总量和销售总金额。6.使用层次化索引,对菜品进行分类汇总。
1——————————————————————————————————
import pandas as pd
studnets_data = pd.DataFrame({'年级':['大一','大二','大三', '大四','大二','大三', '大一','大三','大四'], '姓名':['李宏卓','李思真','张振海', '赵鸿飞','白蓉','马腾飞', '张晓凡','金紫萱','金烨'], '年龄':[18,19,20,21, 19,20,18,20,21], '身高':[175,165,178,175, 160,180,167,170,185], '体重':[65,60,70,76,55, 70,52,53,73]})
studnets_data data = studnets_data.groupby('年级')
Freshman = dict([x for x in data])['大一']
print(Freshman)
#(2) 答案: data = data.apply(max) del data['年级'] print(data)
#(3) 答案: Junior = dict([x for x in data])['大三']
print(Freshman['体重'].apply('mean')) print(Junior['体重'].apply('mean'))
2——————————————————————————————————————
#(1)答案: import pandas as pd
import numpy as np
group_a = pd.DataFrame({'A': [2,3,5,2,3], 'B': ['5',np.nan,'2','3','6'], 'C': [8,7,50,8,2], 'key': [3,4,5,2,5]})
group_b = pd.DataFrame({'A': [3,3,3], 'B': [4,4,4], 'C': [5,5,5]})
print(group_a) print(group_b)
#(2)答案: group_a = group_a.combine_first(group_b) group_a
#(3)答案: group_a.rename(columns={'key':'D'})
3——————————————————————————————————————
3. import pandas as pd
# 读取运行员信息表.csv 文件中的内容
f1 = open('C:/Users/admin/Desktop/运动员信息表.csv')
df = pd.read_csv(f1) df
# 按项目一列进行分组
data_group = df.groupby('项目')
# 输出篮球分组的信息
df_basketball = dict([x for x in data_group])['篮球'] df_basketball
# 按性别一列进行分组,并使用方法
groupby_sex = df_basketball.groupby('性别')
groupby_sex.mean()
# 使用 transfrom 方法将数据进行聚合,并利用其特性将平均值进行广播
info = groupby_sex.transform('mean') info
# 查看男篮运动员的分组
baseketball_male = dict([x for x in groupby_sex])[' 男'] baseketball_male
# 求数据极差的函数
def range_data_group(arr): return arr.max() -arr.min()
# 求年龄、身高、体重这三列数据的极差值
baseketball_male.agg({'年龄(岁)':range_data_group, '身高(cm)':range_data_group, '体重(kg)':range_data_group})
# 添加“体质指数”列
df_basketball['体质指数'] = 0 df_basketball
# 定义计算 BMI 值的函数
def outer(num): def ath_bmi(sum_bmi):
weight = df_basketball['体重(kg)']
height = df_basketball['身高(cm)']
sum_bmi = weight / (height/100)**2
return num + sum_bmi
return ath_bmi all_bmi = df_basketball['体质指数'] df_basketball['体质指数'] = df_basketball[['体质指数']].apply(outer(all_bmi)) df_basketball
4——————————————————————————————————————————
import pandas as pd
# 读取北京地区信息
file_path_bj = open('C:/Users/admin/Desktop/北京地区信息.csv')
file_data_bjinfo = pd.read_csv(file_path_bj) file_data_bjinfo
# 读取天津地区信息
file_path_tj = open('C:/Users/admin/Desktop/天津地区信息.csv')
file_data_tjinfo = pd.read_csv(file_path_tj)
file_data_tjinfo
# 检测 file_data_bjinfo 中的数据,返回 True 的表示是重复数据
file_data_bjinfo.duplicated()
# 检测 file_data_tjinfo 中的数据,返回 True 的表示是重复数据
file_data_tjinfo.duplicated()
# 北京地区 删除重复数据
file_data_bjinfo = file_data_bjinfo.drop_duplicates() file_data_bjinfo file_data_tjinfo.isnull()
# 检测数据是否存在缺失数据
# 计算常住人口的平均数,设置为 float 类型并保留两位小数
population = float("{:.2f}".format(file_data_tjinfo['常住人口(万人)'].mean()))
# 以字典映射的形式将需要填充的数据进行对应
values={'常住人口(万人)':population} file_data_tjinfo = file_data_tjinfo.fillna(value=values) file_data_tjinfo
# 对北京地区信息进行异常值检测
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei']
#用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False
#用来正常显示负号
file_data_bjinfo.boxplot(column=['行政面积(K ㎡)','户籍人口(万人)','男性','女性','GDP(亿元) ','常住人口(万人)'])
# 对天津地区信息进行异常值检测
file_data_tjinfo.boxplot(column=['行政面积(K ㎡)','户籍人口(万人)','男性','女性','GDP(亿元) ','常住人口(万人)'])
# 对两地信息数据进行合并
pd.concat([file_data_bjinfo,file_data_tjinfo],ignore_index=True)
5——————————————————————————————————————————
import pandas as pd
# 1. 读取 CSV 文件
df = pd.read_csv('orders.csv')
# 2. 索引操作选择特定列的数据(例如:选择 dishes_name 和 amounts 列) selected_columns_df = df[['dishes_name', 'amounts']] print("Selected Columns:") print(selected_columns_df.head())
# 打印选定的列的前几行
# 3. 算术运算(计算订单中每个菜品的总价)
df['total_price'] = df['amounts'] * df['counts']
print("\nArithmetic Operation - Total Price per Dish:")
print(df[['dishes_name', 'counts', 'amounts', 'total_price']].head())
# 打印菜品名、数量、单价 和总价的前几行
# 4. 排序(例如:按照订单的总价从高到低排序)
sorted_df = df.sort_values(by='total_price', ascending=False)
print("\nSorted DataFrame by Total Price:")
print(sorted_df[['dishes_name', 'total_price']].head())
# 打印按总价排序后的前几行
# 5. 统计(例如:计算各个菜品的销售总量和销售总金额)
sales_summary = df.groupby('dishes_name').agg({
'counts': 'sum',
'amounts': 'sum',
'total_price') }).rename(columns='counts':'total_sold','amounts':'total_revenue_based_on_single_price'})
# 如果需要基于总价计算销售总金额,请使用下面的代码
# sales_summary = df.groupby('dishes_name').agg({ # 'counts': 'sum',
# 计算销售总量
# 'total_price': 'sum'
# 计算基于总价的销售总金额
# }).rename(columns={'counts': 'total_sold', 'total_price': 'total_revenue'}) print("\nSales Summary:") print(sales_summary.head())
# 打印销售统计的前几行
# 6. 层次化索引(例如:先按 parent_class_name 分类,再按 dishes_name 分类,计算销售总量和 销售总金额)
# 假设 parent_class_name 列存在于数据集中,并且我们希望根据这个分类进行分组 hierarchical_index_df = df.groupby(['parent_class_name', 'dishes_name']).agg({ 'counts': 'sum', 'amounts':'sum'}).rename(columns='counts':'total_sold','amounts':'total_revenue_based_on_single_price'})
# 如果需要基于总价计算层次化索引的销售总金额,请在 groupby 之后对'total_price'进行求和 print("\nHierarchical Indexing Sales Summary:")
print(hierarchical_index_df.head())
# 打印层次化索引销售统计