我在这里面临一些问题,在我的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)
答案 0 :(得分:168)
sort()
已弃用DataFrames,支持:
sort_values()
到按列排序 sort_index()
到按索引排序 答案 1 :(得分:3)
sort
在v0.20中已由sort_values
和sort_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
例如,要按“ 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
例如,要按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
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.reindex
和numpy.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
。
例如,
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.abs
和Series.argsort
。在this post中也进行了讨论(我已经回答了这个问题)。