目录
将成绩排名信息写入csv格式的文件中,文件名称为:test_你自己的名字_时间戳.csv
需导入的包
使用了大量的pandas原生库
#pandas库中的各种功能和方法来处理和分析数据了。命名为pd
import pandas as pd
#它们分别用于处理图像、绘制图像和操作字体
from PIL import Image, ImageDraw, ImageFont
from datetime import datetime
输出所有同学“名称:对应成绩”的信息
skiprows能够跳过第一行,就是不哪一行可以跳过
# 读取Excel文件时跳过第一行(索引0)
df = pd.read_excel('表名.xlsx', skiprows=1)
# 输出所有同学“名称:对应成绩”的信息
for index, row in df.iterrows():
print(f"{row['姓名']}: {row['成绩']}")
输出分值最高和最低的同学名称及分数
# 成绩列中存在字符串值,而 ‘min(),max()’ 函数无法处理字符串值。
可以先将成绩列转换为数值类型。
df['成绩'] = pd.to_numeric(df['成绩'], errors='coerce')
# 查找分值最低和最高的同学
min_score = df['成绩'].min()
max_score = df['成绩'].max()
min_students = df[df['成绩'] == min_score][['姓名', '成绩']]
max_students = df[df['成绩'] == max_score][['姓名', '成绩']]
print("分值最低的同学:")
for index, row in min_students.iterrows():
print(f"{row['姓名']}: {row['成绩']}")
print("分值最高的同学:")
for index, row in max_students.iterrows():
print(f"{row['姓名']}: {row['成绩']}")
求出平均值并输出
# 计算平均分数,第二行保留两位小数
average_score = df['成绩'].mean()
average_score = round(average_score, 2)
print("平均分数:", average_score)
# 输出高于平均值的同学名称及成绩
above_average = df.loc[df['成绩'] > average_score, ['姓名', '成绩']]
print("高于平均值的同学和成绩:")
for index, row in above_average.iterrows():
print(f"{row['姓名']}: {row['成绩']}")
# 输出低于平均值的同学名称及成绩
below_average = df.loc[df['成绩'] < average_score, ['姓名', '成绩']]
print("低于平均值的同学和成绩:")
for index, row in below_average.iterrows():
print(f"{row['姓名']}: {row['成绩']}")
将成绩排名信息写入csv格式的文件中,文件名称为:test_你自己的名字_时间戳.csv
# 排序成绩
sorted_df = df.sort_values(by='成绩', ascending=False)
# 获取当前时间戳
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
# 构造文件名
filename = f"zss_{timestamp}.csv"
# 将成绩排名信息写入CSV文件
sorted_df.to_csv(filename, index=False)
print(f"已将成绩排名信息写入文件: {filename}")
生成一个图片,将前三名信息水印在这张图片上,将图片保存在
# 读取数据和原始图片
image_path = "OIP-C.jpg" # 你的背景图片路径
image = Image.open(image_path)
# 排序成绩
sorted_df = df.sort_values(by='成绩', ascending=False)
top_three = sorted_df.head(3)
# 创建一个可以用于添加文本的ImageDraw对象
draw = ImageDraw.Draw(image)
# 设置字体、字号、颜色和位置
font_path = 'C:/Windows/Fonts/simhei.ttf' # 你的字体文件路径
font = ImageFont.truetype(font_path, size=50)
text_color = (0, 0, 0) # 黑色
text_position = (50, 50) # 文本起始位置
# 添加前三名信息水印
for i, (_, row) in enumerate(top_three.iterrows()):
name = row['姓名']
score = row['成绩']
text = f"{i+1}. {name}: {score}"
draw.text(text_position, text, fill=text_color, font=font)
text_position = (text_position[0], text_position[1] + 50) # 下移一行
# 构造文件名
filename = f"zss_{timestamp}.jpg"
# 保存生成的图片
image.save(filename)
print(f"已生成带有前三名信息水印的图片并保存为: {filename}")
排序,最大值最小值另一种方法
list1 = [25, 87, 46, 68, 32]
average = sum(list1) / len(list1)
print(average)
sort = sorted(list1, reverse=True)
print(sort)
for i in list1:
if i == min(list1):
print('最小', i)
if i == max(list1):
print('最大', i)
if i < average:
print('小于平均值', i)
if i > average:
print('大于平均值', i)