在python中查找相应的值

时间:2016-08-19 06:20:30

标签: python python-3.x csv

我想找到最大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)

这是我的数据:

This is my data

5 个答案:

答案 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)

以下是一些改进代码的方法:

  1. 使用文件时,使用文件后最好close()文件,或将代码段包装在with块中。这会自动关闭您的文件。
  2. 您在文件中的行中多次迭代,这是不必要的。有更多高效的方法可以解决您的问题。
  3. 此代码对我有用:

    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}}里面。

此外,如果您已经加载了该文件,那么您可以在列表中使用rownext,如下所示:

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]