Pandas:DataFrame 排序
Posted
技术标签:
【中文标题】Pandas:DataFrame 排序【英文标题】:Pandas: DataFrame sorting [duplicate] 【发布时间】:2019-04-23 01:11:21 【问题描述】:我正在尝试使用 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 似乎无法识别列的名称。我哪里错了?谢谢
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:您传递给 sort_values 的两列之一是您的索引吗?
如果是这样,您可以使用 reset_index() 将索引转换为新列,然后按列和索引进行排序。
data.reset_index().sort_values(['Column','Index']).set_index('Index')
【讨论】:
以上是关于Pandas:DataFrame 排序的主要内容,如果未能解决你的问题,请参考以下文章
Pandas:如何从给定(行,列)对列表的 DataFrame 中检索值?
python-pandas基础数据结构(DataFrame)