'数据帧'对象没有属性' sort'

时间:2017-05-23 00:14:45

标签: python pandas numpy dataframe

我在这里面临一些问题,在我的python包中我安装了numpy,但我仍然有这个错误' DataFrame'对象没有属性'排序'

任何人都可以给我一些想法..

这是我的代码:

final.loc[-1] =['', 'P','Actual']
final.index = final.index + 1  # shifting index
final = final.sort()
final.columns=[final.columns,final.iloc[0]]
final = final.iloc[1:].reset_index(drop=True)
final.columns.names = (None, None)

2 个答案:

答案 0 :(得分:168)

sort()已弃用DataFrames,支持:

答案 1 :(得分:3)

sort在v0.20中已由sort_valuessort_index取代。除此之外,我们还有argsort

以下是一些常见的排序用例,以及如何使用当前API中的排序功能解决它们。首先,设置。

# Setup
np.random.seed(0)
s = pd.Series(np.random.choice(100, 5))
df = pd.DataFrame({'A': list('accddabbea'), 'B': np.random.choice(10, 10)})    
df

   A  B
0  a  7
1  c  9
2  c  3
3  d  5
4  d  2
5  a  4
6  b  7
7  b  6
8  e  8
9  a  8

s

0    44
1    47
2    64
3    67
4    67
dtype: int64

按单列排序DataFrame

例如,要按“ A”列对df进行排序,请使用DataFrame.sort_values

df.sort_values(by='A')

   A  B
0  a  7
5  a  4
9  a  8
6  b  7
7  b  6
1  c  9
2  c  3
3  d  5
4  d  2
8  e  8

如果您需要新的RangeIndex,请使用DataFrame.reset_index

sorted = df.sort_values(by='A').reset_index(drop=True)
sorted.head()

   A  B
0  a  7
1  a  4
2  a  8
3  b  7
4  b  6

按多列排序DataFrame

例如,要按df中的 列“ A”和“ B”进行排序,可以将列表传递到sort_values

df.sort_values(by=['A', 'B'])

   A  B
5  a  4
0  a  7
9  a  8
7  b  6
6  b  7
2  c  3
1  c  9
4  d  2
3  d  5
8  e  8

排序系列

通过Series.sort_values轻松完成:

s.sort_values()

0    44
1    47
2    64
3    67
4    67
dtype: int64

我已回答的另一篇文章的更多信息:Sorting a Pandas Series


按索引排序DataFrame(或系列)

df2 = df.sample(frac=1)
df2

   A  B
0  a  7
9  a  8
2  c  3
3  d  5
5  a  4
6  b  7
7  b  6
1  c  9
8  e  8
4  d  2

您可以使用DataFrame.sort_index

df2.sort_index()

   A  B
0  a  7
1  c  9
2  c  3
3  d  5
4  d  2
5  a  4
6  b  7
7  b  6
8  e  8
9  a  8 

您还可以在此处利用Index.argsort,并使用DataFrame.iloc重新编制索引:

df2.iloc[df2.index.argsort()]

   A  B
0  a  7
1  c  9
2  c  3
3  d  5
4  d  2
5  a  4
6  b  7
7  b  6
8  e  8
9  a  8

甚至DataFrame.reindexnumpy.sort

df2.reindex(np.sort(df2.index))

   A  B
0  a  7
1  c  9
2  c  3
3  d  5
4  d  2
5  a  4
6  b  7
7  b  6
8  e  8
9  a  8

这些方法也适用于Series


按索引列表对DataFrame(或系列)进行排序

例如,

idx = df2.index.argsort()
idx
# array([0, 7, 2, 3, 9, 4, 5, 6, 8, 1])

这个“排序”问题实际上是一个简单的索引问题。只需将整数标签传递给iloc即可。

df.iloc[idx]

   A  B
0  a  7
7  b  6
2  c  3
3  d  5
9  a  8
4  d  2
5  a  4
6  b  7
8  e  8
1  c  9

按绝对值排序

与上述类似,您可以使用Series.absSeries.argsort。在this post中也进行了讨论(我已经回答了这个问题)。