1.学生成绩表
-*- coding: gbk -*-
import pandas as pd
读取Excel表格
df = pd.read_excel(r"D:\python_12\周五面试结果.xlsx")
print(df)
输出所有同学“名称:对应成绩”的信息
name_scores = df[['名称', '成绩']].values.tolist()
for name, score in name_scores:
print("{}: {}".format(name, score))
输出分值最高和最低的同学名称及分数
max_score = df['成绩'].max()
print('-----', max_score)
min_score = df['成绩'].min()
highest_students = df[df['成绩'] == max_score]['姓名'].values.tolist()
lowest_students = df[df['成绩'] == min_score]['姓名'].values.tolist()
print("最高分:")
for student in highest_students:
print("---最高分:{}: {}".format(student, max_score))
print("最低分:")
for student in lowest_students:
print("---最低分{}: {}".format(student, min_score))
highest_students = df.nlargest(3, '成绩')[['名称', '成绩']].values.tolist()
print("最高分:")
for student, score in highest_students:
print("---最高分:{}: {}".format(student, score))
lowest_students = df.nsmallest(3, '成绩')[['名称', '成绩']].values.tolist()
print("最低分:")
for student, score in lowest_students:
print("---最低分:{}: {}".format(student, score))
求出平均值并输出
average_score = df['成绩'].mean()
print("平均分:", average_score)
输出高于平均值的同学名称及成绩
above_average_students = df[df['成绩'] > average_score][['名称', '成绩']].values.tolist()
print("高于平均分的同学:")
for student, score in above_average_students:
print("{}: {}".format(student, score))
输出低于平均值的同学名称及成绩
below_average_students = df[df['成绩'] < average_score][['名称', '成绩']].values.tolist()
print("低于平均分的同学:")
for student, score in below_average_students:
print("{}: {}".format(student, score))
将成绩排名信息写入csv格式的文件中
output_file = "test_yzl.csv"
df['排名'] = df['成绩'].rank(ascending=False, method='min').astype(int)
df.to_csv(output_file, index=False, float_format='%.2f', columns=['姓名', '成绩', '排名'])
生成一个图片,将前三名信息水印在这张图片上
import matplotlib.pyplot as plt
top3_students = df[df['排名'] <= 3][['名称', '成绩']]
plt.figure()
plt.imshow([[0, 0, 0]])
plt.axis('off')
plt.rcParams['font.family'] = 'SimSun'
plt.text(0.5, 0.5, top3_students.to_string(index=False), fontsize=12, color='white', verticalalignment='center',
horizontalalignment='center')
plt.savefig("images/top3_students.png", bbox_inches='tight', pad_inches=0)
plt.close()
plt.show()
2.魔法方法示例
1.init() 初始化对象
class Person:
def __init__(self, name):
self.name = name
person = Person("Alice")
2.str() 返回对象的字符串表示
class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Person: {self.name}"
person = Person("Bob")
print(person)
3.len() 返回对象的长度
class MyList:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items)
my_list = MyList([1, 2, 3, 4, 5])
print(len(my_list))
4.getitem() 获取对象的索引值
class MyList:
def __init__(self, items):
self.items = items
def __getitem__(self, index):
return self.items[index]
my_list = MyList([1, 2, 3, 4, 5])
print(my_list[2])
5.setitem() 设置对象的索引值
class MyList:
def __init__(self):
self.items = []
def __setitem__(self, index, value):
self.items[index] = value
my_list = MyList()
my_list[0] = 10
print(my_list.items)
6.getattr() 获取不存在的属性时调用
class Person:
def __getattr__(self, attr):
return f"Attribute {attr} does not exist."
person = Person()
print(person.name)
7.call() 使对象可调用
class Adder:
def __call__(self, a, b):
return a + b
add = Adder()
result = add(3, 4)
print(result)
8.iter() 返回一个迭代对象
class MyRange:
def __init__(self, start, stop):
self.start = start
self.stop = stop
def __iter__(self):
return self
def __next__(self):
if self.start >= self.stop:
raise StopIteration
current = self.start
self.start += 1
return current
my_range = MyRange(1, 5)
for num in my_range:
print(num)
9.enter()和exit() 上下文管理器方法
class FileManger:
def __init__(self, filename):
self.filename = filename
def __enter__(self):
self.file = open(self.filename, "w")
return self.file
def __exit__(self, exc_type, exc_value, traceback):
self.file.close()
with FileManger("file.txt") as file:
file.write("Hello, World")
10.eq() 判断相等性
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __eq__(self, other):
return self.x == other.x and self.y == other.y
point1 = Point(1, 2)
point2 = Point(1, 2)
print(point1 == point2)