从csv文件(python)中查找列中的最大2(或n)值

时间:2016-10-16 16:04:34

标签: python csv pandas numpy dataframe

我想查找从csv文件导入的列中的最大值。 对于最大值,我使用了这段代码(我看到它也打印了与最大值相关的左栏的值,为什么?):

data = pandas.read_csv(dataset, sep=',', usecols=[1])
maxValue=data.max(axis=0)[1]

如何获得前2个(或n个)最大值(使用pandas,scipy或numpy)? 我试过了,但没有用:

secondM=data[data[1]!=maxValue][data[1]].max()

1 个答案:

答案 0 :(得分:2)

更新:显示所有列的N个最大值的更一般解决方案:

In [393]: df
Out[393]:
   a  b  c
0  2  9  9
1  4  8  0
2  8  6  3
3  0  8  3
4  3  6  0

In [394]: N = 2
     ...: pd.DataFrame([df[c].nlargest(N).values.tolist() for c in df.columns],
     ...:              index=df.columns,
     ...:              columns=['{}_largest'.format(i) for i in range(1, N+1)]).T
     ...:
Out[394]:
           a  b  c
1_largest  8  9  9
2_largest  4  8  3

In [395]: N = 3
     ...: pd.DataFrame([df[c].nlargest(N).values.tolist() for c in df.columns],
     ...:              index=df.columns,
     ...:              columns=['{}_largest'.format(i) for i in range(1, N+1)]).T
     ...:
Out[395]:
           a  b  c
1_largest  8  9  9
2_largest  4  8  3
3_largest  3  8  3

OLD回答:

我假设您希望单个列具有2(或n)个最大值(正如您使用usecols=[1]):

In [279]: df
Out[279]:
   a  b  c
0  1  0  2
1  0  7  7
2  7  7  9
3  5  1  6
4  7  0  3
5  4  0  4
6  0  6  1
7  8  3  6
8  2  8  8
9  2  9  2

In [280]: df['a'].nlargest(2)
Out[280]:
7    8
2    7
Name: a, dtype: int32

注意:如果您的CSV文件没有标签(列名称),您可以这样读取它(假设您只想读取第二个(1)和第四个CSV文件中的(3)列:

df = pd.read_csv(r'/path/to/file.csv', sep=',', usecols=[1,3],
                 header=None, names=['col1','col2'])