csv 如何返回具有最大值的某个人的姓名

piv4azn7  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(123)

我是python新手,对这段代码有一个疑问(不允许使用panda)。我有一个CSV文件(名为personal_info.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)
kqhtkvqz

kqhtkvqz1#

我建议在largest_number查找算法中使用enumerate(或range)。Enumerate(或range)将为您提供项目的索引,当您找到更大的数字时,也可以保存该索引。也就是说,您需要存储两个值:最大值和最大值的索引。那么,索引处的名称就是你要找的名称。
这个页面很好地描述了枚举、范围和索引背后的原因:
https://realpython.com/python-enumerate/
一旦你掌握了这一点,你可以尝试更多的方法,如创建一个dictionare与键(名称)和值,并使用max函数或使用numpy库,但所有这些都导致了相同的逻辑描述。

olmpazwi

olmpazwi2#

假设您有此csv文件:

Name,Wt,Ht
Bob,50.5,60.1
Carol,49.2,55.2
Ted,51.1,59.9
Alice,48.2,54.33

您可以使用csv模块读取该文件:

import csv 

with open(fn) as f:
    reader=csv.reader(f)
    header=next(reader)
    data=[[row[0]]+list(map(float, row[1:])) for row in reader]

结果:

>>> data
[['Bob', 50.5, 60.1], ['Carol', 49.2, 55.2], ['Ted', 51.1, 59.9], ['Alice', 48.2, 54.33]]

然后,您可以使用max函数和一个key函数来获取某个值的:

>>> max(data, key=lambda row: row[1])
['Ted', 51.1, 59.9]

您可以使用header中的信头值来取得csv数据中数据行的索引:

>>> max(data, key=lambda row: row[header.index('Wt')])
# same row

如果您只需要名称,则使用下标:

>>> max(data, key=lambda row: row[1])[0]
'Ted'

相关问题