Je rencontre un problème ici, dans mon paquetage python, j'ai installé numpy, mais j'ai toujours cette erreur l'objet 'DataFrame' n'a pas d'attribut 'sort'
Tout le monde peut me donner une idée ..
Ceci est mon code:
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)
sort()
est devenu obsolète pour DataFrames en faveur de:
sort_values()
to trier par colonne (s) sort_index()
à trier par l'index sort()
était obsolète (mais toujours disponible) dans Pandas avec la version 0.17 (2015-10-09) avec l'introduction de sort_values()
et sort_index()
. Il a été supprimé de Pandas avec la version 0.20 (2017-05-05).
sort
a été remplacé dans la v0.20 par DataFrame.sort_values
et DataFrame.sort_index
. En plus de cela, nous avons aussi argsort
.
Voici quelques cas d'utilisation courants en matière de tri et comment les résoudre à l'aide des fonctions de tri de l'API actuelle. Tout d'abord, la configuration.
_# Setup
np.random.seed(0)
df = pd.DataFrame({'A': list('accab'), 'B': np.random.choice(10, 5)})
df
A B
0 a 7
1 c 9
2 c 3
3 a 5
4 b 2
_
Par exemple, pour trier df
par la colonne "A", utilisez _sort_values
_ avec un nom de colonne unique:
_df.sort_values(by='A')
A B
0 a 7
3 a 5
4 b 2
1 c 9
2 c 3
_
Si vous avez besoin d’un nouveau RangeIndex, utilisez DataFrame.reset_index
.
Par exemple, pour trier par à la fois col "A" et "B" dans df
, vous pouvez passer une liste à _sort_values
_:
_df.sort_values(by=['A', 'B'])
A B
3 a 5
0 a 7
4 b 2
2 c 3
1 c 9
_
_df2 = df.sample(frac=1)
df2
A B
1 c 9
0 a 7
2 c 3
3 a 5
4 b 2
_
Vous pouvez le faire en utilisant _sort_index
_:
_df2.sort_index()
A B
0 a 7
1 c 9
2 c 3
3 a 5
4 b 2
df.equals(df2)
# False
df.equals(df2.sort_index())
# True
_
Voici quelques méthodes comparables avec leurs performances:
_%timeit df2.sort_index()
%timeit df2.iloc[df2.index.argsort()]
%timeit df2.reindex(np.sort(df2.index))
605 µs ± 13.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
610 µs ± 24.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
581 µs ± 7.63 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
_
Par exemple,
_idx = df2.index.argsort()
idx
# array([0, 7, 2, 3, 9, 4, 5, 6, 8, 1])
_
Ce problème de "tri" est en réalité un simple problème d'indexation. Il suffit de passer des étiquettes entières à iloc
.
_df.iloc[idx]
A B
1 c 9
0 a 7
2 c 3
3 a 5
4 b 2
_