From b6e996c1d606d64495fa15b5303be0c9a5f8c9c9 Mon Sep 17 00:00:00 2001 From: Jitse Niesen Date: Sun, 19 Jun 2016 22:04:39 +0100 Subject: [PATCH] Dataframe editor: Make sorting stable; handle order correctly. - Set ascending flag correctly, fixes #3020. - Use mergesort so that sorting is stable, fixes #3010. - Use .sort_values() because .sort() is deprecated since pandas 0.17. --- .../widgets/variableexplorer/dataframeeditor.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/spyderlib/widgets/variableexplorer/dataframeeditor.py b/spyderlib/widgets/variableexplorer/dataframeeditor.py index 5705025924a..1d42f523fb0 100644 --- a/spyderlib/widgets/variableexplorer/dataframeeditor.py +++ b/spyderlib/widgets/variableexplorer/dataframeeditor.py @@ -269,12 +269,20 @@ def sort(self, column, order=Qt.AscendingOrder): "relation is defined for complex numbers") return False try: + ascending = order == Qt.AscendingOrder if column > 0: - self.df.sort(columns=self.df.columns[column-1], - ascending=order, inplace=True) + try: + self.df.sort_values(by=self.df.columns[column-1], + ascending=ascending, inplace=True, + kind='mergesort') + except AttributeError: + # for pandas version < 0.17 + self.df.sort(columns=self.df.columns[column-1], + ascending=ascending, inplace=True, + kind='mergesort') self.update_df_index() else: - self.df.sort_index(inplace=True, ascending=order) + self.df.sort_index(inplace=True, ascending=ascending) self.update_df_index() except TypeError as e: QMessageBox.critical(self.dialog, "Error",