Python实现:从CSV文件中找出体重最大者的姓名(禁用Pandas)
问题:从CSV文件中找出体重最大值对应的姓名(不使用Pandas)
我是Python新手,有一个代码问题(且不允许使用Pandas)。我有一个名为personal_info.csv的CSV文件,包含full_name、weight_kg、height_m列。我想要编写一个函数,找出weight_kg列中的最大值,并返回对应的姓名(姓名为字符串类型,体重为浮点型)。
目前我只写出了以下代码,但不知道如何定位CSV文件的指定列,以及如何找到对应的姓名:
for number in heights: if number > largest_number: largest_number = number print(largest_number)
我还看到了这段代码,但不知道如何将其应用到我的问题中:
def max_employment(countries, employment): max_value_index = np.argmax(employment) max_value = employment[max_value_index] max_country = countries[max_value_index] return (max_country, max_value)
解决方案
用Python标准库csv就能处理,核心思路是逐行读取CSV,同时实时记录当前最大体重和对应的姓名,不用把整个文件加载到内存里。
完整代码示例:
import csv def find_heaviest_person(csv_file_path): max_weight = -float('inf') # 初始设为负无穷,确保第一个体重能覆盖它 heaviest_name = "" with open(csv_file_path, mode='r', encoding='utf-8') as file: # DictReader可以直接通过列名获取对应值,不用手动处理索引 reader = csv.DictReader(file) for row in reader: # 把字符串类型的体重转为浮点型 current_weight = float(row['weight_kg']) current_name = row['full_name'] if current_weight > max_weight: max_weight = current_weight heaviest_name = current_name return (heaviest_name, max_weight) # 调用函数示例 name, weight = find_heaviest_person('personal_info.csv') print(f"体重最大的人是:{name},体重为{weight}kg")
代码说明
csv.DictReader会自动把首行作为列名,后续每行数据都可以通过列名(比如row['full_name'])直接访问,不用自己数索引位置。- 初始化
max_weight为负无穷,是为了兼容所有可能的体重数值(哪怕是负数场景),保证第一个读取到的体重能正确替换初始值。 - 逐行遍历的方式更适合大文件,不会占用过多内存。
关于你参考的代码
那段用np.argmax的代码是基于NumPy数组的实现逻辑,如果你不想依赖NumPy,上面的纯Python方案更直接。如果一定要套用类似思路,可以先把姓名和体重分别存入列表,再找最大值索引,但这种方式需要先把整个文件读进内存,适合小文件:
import csv def find_heaviest_person_with_lists(csv_file_path): names = [] weights = [] with open(csv_file_path, mode='r', encoding='utf-8') as file: reader = csv.DictReader(file) for row in reader: names.append(row['full_name']) weights.append(float(row['weight_kg'])) max_weight = max(weights) max_index = weights.index(max_weight) return (names[max_index], max_weight)
内容的提问来源于stack exchange,提问作者Emppy
相关产品推荐
相关产品推荐

