我是python新手,对这段代码有一个问题(我不允许使用pandas)。我有一个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)
我建议在您的largest_number
查找算法中使用enumerate
(或range
)。Enumerate(或range)将为您提供项目的索引,一旦找到更大的数字,您也可以保存该索引。也就是说,您需要存储两个值:最大值和最大值的索引。然后,索引处的名称就是您要查找的名称。
这个页面很好地描述了枚举、范围和索引背后的原因:
https://realpython.com/python-enumerate/
一旦你掌握了这个,你可以尝试更多的方法,比如用键(名称)和值创建一个字典,使用max
函数或使用numpy库。然而,所有这些都导致了如上所述的相同逻辑。
假设您有这样一个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
函数和一个键函数获得一些值:
>>> 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'