如何使用pandas在没有列名的情况下进行排序

时间:2017-04-08 10:13:35

标签: python sorting pandas

我的数据是:

import pandas
A=pandas.read_csv(r'D:\AUL_prediction\Merge_file\plasmid',sep='   ',header=None, engine='python')
print A

结果是:

                 0     1                 2            3  
                 0     plasmid.gb        NC021289.1    75   
                 1     plasmid.gb        NC016815.1   763   
                 2     plasmid.gb      NZCP011480.1   102   
                 3     plasmid.gb        NC017324.1  1278   
                 4     plasmid.gb        NC007488.2    32   
                 5     plasmid.gb        NC019848.2   632   
                 6     plasmid.gb      NZCP007644.1   208   
                 7     plasmid.gb        NC007336.1    46   
                 8     plasmid.gb      NZCP012748.1   402   
                 9     plasmid.gb      NZCP011248.1   353   

我想根据A [3]和A [2]对这些数据进行排序,任何人都知道如何做到这一点?我尝试了sort_values,但它无法识别列名' 0'或者' 1'

3 个答案:

答案 0 :(得分:1)

首先选择:

f = A.columns.values.tolist()

要查看列的实际名称是什么。 然后你可以尝试:

A.sort_values(by=f[:2])

如果按列名排序,请记住2L是一个长整数,所以只需转到:

A.sort_values(by=[2L])

答案 1 :(得分:1)

这个问题很旧,但是我刚刚遇到了这个问题!

当您没有列标题时,只需提供值并避免在by中使用关键字df.sort_values。解决方案:

df = df.sort_values(df.columns[i])

这里的df是A,而i是列的索引。

答案 2 :(得分:0)

我不确定您为什么坚持不使用标题

如果那是原始数据,那么那不是问题

您可以将标题分配给DataFrame,这对于程序员来说更易读。

import pandas as pd
from io import StringIO

data = """
plasmid.gb,NC021289.1,75   
plasmid.gb,NC016815.1,763   
plasmid.gb,NZCP011480.1,102   
plasmid.gb,NC017324.1,1278   
plasmid.gb,NC007488.2,32   
plasmid.gb,NC019848.2,632   
plasmid.gb,NZCP007644.1,208   
plasmid.gb,NC007336.1,46   
plasmid.gb,NZCP012748.1,402   
plasmid.gb,NZCP011248.1,3
"""

df = pd.read_csv(StringIO(data), sep=',', header=None, engine='python')
print('BEFORE\n', df)
df.columns = ['file', 'event-id', 'value']
print('\nAFTER\n', df.sort_values(['value', 'event-id'], ascending=[False, True]))

输出

BEFORE
             0             1     2
0  plasmid.gb    NC021289.1    75
1  plasmid.gb    NC016815.1   763
2  plasmid.gb  NZCP011480.1   102
3  plasmid.gb    NC017324.1  1278
4  plasmid.gb    NC007488.2    32
5  plasmid.gb    NC019848.2   632
6  plasmid.gb  NZCP007644.1   208
7  plasmid.gb    NC007336.1    46
8  plasmid.gb  NZCP012748.1   402
9  plasmid.gb  NZCP011248.1     3

AFTER
          file      event-id  value
3  plasmid.gb    NC017324.1   1278
1  plasmid.gb    NC016815.1    763
5  plasmid.gb    NC019848.2    632
8  plasmid.gb  NZCP012748.1    402
6  plasmid.gb  NZCP007644.1    208
2  plasmid.gb  NZCP011480.1    102
0  plasmid.gb    NC021289.1     75
7  plasmid.gb    NC007336.1     46
4  plasmid.gb    NC007488.2     32
9  plasmid.gb  NZCP011248.1      3