熊猫:DataFrame排序

时间:2018-11-20 14:49:33

标签: python pandas dataframe

我正在尝试使用sort_values方法对数据框进行排序。我有一个只有两列('TS','VALUES')的数据框(df),因此总是出现以下错误:

df.columns
Out[88]: Index(['TS', 'VALUES'], dtype='object')

df.sort_values(by='TS',axis=1,ascending=True,inplace=True,kind='quicksort',na_position='last')
Traceback (most recent call last):

  File "<ipython-input-89-53f79846b56c>", line 1, in <module>
    df.sort_values(by='TS',axis=1,ascending=True,inplace=True,kind='quicksort',na_position='last')

  File "C:\Users\gianm\Anaconda3\lib\site-packages\pandas\core\frame.py", line 4421, in sort_values
    stacklevel=stacklevel)

  File "C:\Users\gianm\Anaconda3\lib\site-packages\pandas\core\generic.py", line 1382, in _get_label_or_level_values
    raise KeyError(key)

KeyError: 'TS'

似乎python无法识别列名。我哪里错了?谢谢

2 个答案:

答案 0 :(得分:1)

问题为axis=1,它可用于按索引值排序,因此需要axis=0或将其删除,因为sort_values中的默认参数:

  

DataFrame.sort_values (by,axis = 0,ascending = True,inplace = False,kind ='quicksort',na_position ='last')

df = pd.DataFrame({'TS': [40,1,4], 'a':[1,5,2], 'd':[7,8,9]}, index=list('abc'))
print (df)
   TS  a  d
a  40  1  7
b   1  5  8
c   4  2  9

df.sort_values(by='TS',
               axis=0,
               ascending=True,
               inplace=True,
               kind='quicksort',
               na_position='last') 

print (df)
   TS  a  d
b   1  5  8
c   4  2  9
a  40  1  7

如果删除具有默认值的参数:

df.sort_values(by='TS', inplace=True) 
print (df)
   TS  a  d
b   1  5  8
c   4  2  9
a  40  1  7

df.sort_values(by='a',axis=1,ascending=True,inplace=True,kind='quicksort',na_position='last') 
print (df)
   a  d  TS
a  1  7  40
b  5  8   1
c  2  9   4

答案 1 :(得分:0)

您要传递给sort_values的2列之一是索引吗?

如果是这样,您可以使用reset_index()将索引转换为新列,然后按列和索引进行排序。

data.reset_index().sort_values(['Column','Index']).set_index('Index')