我有一个包含多行的大型数据集,并希望从所有行返回index[2]
的最大值。所以在下面的例子中我想要返回20。以下只是在索引处打印值而不是最大值。
1,"Goroka",10,"Pacific"
2,"Madang",20,"Pacific"
3,"Mount Hagen",5,"Pacific"
for line in data.readlines():
splitLine = line.split(",") # Split line on ,
ID = splitLine[0]
name = splitLine[1]
no = splitLine[2]
ocean = splitLine[4]
print max(no)
答案 0 :(得分:1)
随时建立最大值:
maxno = 0
for line in data.readlines():
splitLine = line.split(",") # Split line on ,
ID = splitLine[0]
name = splitLine[1]
no = splitLine[2]
ocean = splitLine[4]
if no > maxno:
maxno = no
print maxno
答案 1 :(得分:1)
如果您的数据看起来与内存中的字符串相符:
>>> print txt
1,"Goroka",10,"Pacific"
2,"Madang",20,"Pacific"
3,"Mount Hagen",5,"Pacific"
您可以使用max
或min
和lambda键函数来查找第三个csv字段的最大值或最小值的行:
>>> max(txt.splitlines(), key=lambda line:int(line.split(',')[2]))
'2,"Madang",20,"Pacific"'
或者,一分钟:
>>> min(txt.splitlines(), key=lambda line:int(line.split(',')[2]))
'3,"Mount Hagen",5,"Pacific"'
如果您只是在寻找第三个值,则解析该行。
使用完全相同的方法,您可以对这样的数据进行排序,以获得最大n值或最小值:
>>> print '\n'.join(sorted(txt.splitlines(), key=lambda line:int(line.split(',')[2])))
3,"Mount Hagen",5,"Pacific"
1,"Goroka",10,"Pacific"
2,"Madang",20,"Pacific"
如果数据在文件中,请使用相同方法逐行解析的一般习惯用法:
with open(your_file) as f:
max(f, key=lambda line:int(line.split(',')[2]))
通常,最好在文件中使用csv module来表示此类数据。最好避免使用file.readlines()
来获取文件的内容,而不是使用for
循环遍历文件。
答案 2 :(得分:1)
假设您的数据保存在.txt文件中,并且由于您使用的是Python,您可以尝试使用pandas。
如果您的示例数据在工作目录中保存为“ data.txt ”,请尝试:
import pandas as pd
data = pd.read_table('data.txt', sep=',', header=None)
data.columns = ['col_' + str(no) for no in range(0, len(data.columns))] # add column names (though not necessarily)
max_value = max(data['col_2'])
我认为max_value
就是你想要的。
答案 3 :(得分:0)
使用max(data,key=func)
键功能查找复杂数据集的最大值。假设您有列表中的数据。
test = [[1,"Goroka",10,"Pacific"],[2,"Madang",20,"Pacific"],[3,"Mount Hagen",5,"Pacific"]]
data = max (test,key=lambda x: x[2]) ## or use min
print data[2]
答案 4 :(得分:-2)
我打算建议您将数据保存在数组中。例如:
data = [[1,"Goroka",10,"Pacific"],[2,"Madang",20,"Pacific"],[3,"Mount Hagen,5,"Pacific"]]
然后你就可以得到你想要的东西:
for item in data:
maxno = item[2]
然后你可以随心所欲地做任何事情