我想找到最大mpg的汽车名称。我想要打印出具有最高mpg的“丰田”。我想以Pythonic的方式做到这一点。我不喜欢用熊猫。
这是我的代码:
dataset=[]
f= open('auto-mpg-data.csv')
csv_f=csv.reader(f)
for row in csv_f:
dataset.append(row)
#reading column
mpg=[]
for row in dataset:
mpg.append(float(row[0]))
a=max(mpg)
for a in dataset:
print(carname)
这是我的数据:
答案 0 :(得分:0)
您提到您不喜欢Alert alert = ...
alert.getDialogPane().setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT);
,但为了完整起见,您可以使用pandas.read_csv()
将CSV文件读入数据框(在处理表格数据时非常方便),然后获得最大pandas
值的carname
值:
mpg
为提供的示例CSV打印import pandas as pd
df = pd.read_csv('cars.csv', delim_whitespace=True)
print(df.loc[df['mpg'].idxmax()]['carname'])
。
答案 1 :(得分:0)
以下是一些改进代码的方法:
close()
文件,或将代码段包装在with
块中。这会自动关闭您的文件。此代码对我有用:
import csv
with open('auto-mpg-data.csv','r') as f:
csv_f = list(csv.reader(f))
best_mpg = 0
best_row = 0
for i,j in enumerate(csv_f):
if i == 0:
continue
best_mpg = max(best_mpg, float(j[0]))
if best_mpg == float(j[0]):
best_row = i
print (csv_f[best_row][3])
# Output:
# 'Toyota'
答案 2 :(得分:0)
首先,每个支持迭代的对象都可以使用list
函数直接转换为列表。因此,而不是
for row in csv_f:
dataset.append(row)
你可以这样做:
dataset = list(csv_f)
接下来,由于dataset
是行列表(每行是一个列表),因此您可以使用Python的max
函数来查找要检查的密钥的最大行数。是每行第一个数字的浮点值,如下所示:
max_row = max(dataset, key=lambda row: float(row[0]))
max_row保存最大行数
的行答案 3 :(得分:0)
简化方式:
with open('auto-mpg-data.csv') as fo:
reader = csv.reader(fo)
next(reader) # skip the header
biggest_row = max(reader, key=lambda row: float(row[0]))
print(biggest_row[3]) # or whatever the index is
请注意,如果您的csv包含不正确的数据,那么这将失败,因此为了使其具有容错能力,您必须在reader
而不是max
上编写手动循环并验证每个{ {1}}里面。
此外,如果您已经加载了该文件,那么您可以在列表中使用row
和next
,如下所示:
max
答案 4 :(得分:0)
使用for循环迭代器...
>>> mpg = [12,34,40.5,6]
>>> idx,maxMpg = 0,0
>>> for n,v in enumerate(mpg):
... if v>maxMpg: idx,maxMpg = n,v
...
>>> idx
2
>>> maxMpg
40.5
>>> carnames = ['ford','bmw','toyota','bugatti']
>>> carnames[idx]
'toyota'
>>>
使用列表推导:...
>>> maxMpg = max(mpg)
>>> maxMpgId = [maxMpg == m for m in mpg]
>>> maxMpgId
[False, False, True, False]
>>> carname = [carnames[n] for n,m in enumerate(mpg) if maxMpg == m]
>>> carname
['toyota']
令人讨厌的一个班轮......
carname = [carnames[n] for n,m in enumerate(mpg) if max(mpg) == m]