Ответ 1
df.sort_values(['Total Due'])
возвращает отсортированный DF, но он не обновляет DF на месте.
Так что сделайте это явно:
df = df.sort_values(['Total Due'])
или
df.sort_values(['Total Due'], inplace=True)
Новое в Pandas, возможно, мне не хватает большой идеи?
У меня есть Pandas DataFrame транзакций регистров с формой вроде (500,4)
:
Time datetime64[ns]
Net Total float64
Tax float64
Total Due float64
Я работаю над своим кодом в ноутбуке Python3 Jupyter. Я не могу пройти сортировку любого столбца. Работая с различными примерами кода для сортировки, я не вижу выходной порядок, когда я проверяю df. Итак, я уменьшил проблему, пытаясь заказать только один столбец:
df.sort_values(by='Time')
# OR
df.sort_values(['Total Due'])
# OR
df.sort_values(['Time'], ascending=True)
Независимо от того, какое название столбца или какой логический аргумент я использую, отображаемые результаты никогда не меняют порядок.
Думая, что это может быть Jupyter, я просмотрел результаты с помощью print(df)
, df.head()
и HTML(df.to_html())
(последний пример для ноутбуков Jupyter). Я также перезапустил весь блокнот от импорта CSV до этого кода. И я тоже новичок в Python3 (от версии 2.7), поэтому иногда завязываюсь, но я не вижу, насколько это актуально в этом случае.
Другая публикация имеет аналогичную проблему, Python Pandas sort_values dataframe не работает. В этом случае упорядочение выполнялось по типу столбца string
. Но, как вы можете видеть, все столбцы здесь однозначно сортируются.
Почему мой Pandas DataFrame не отображает новый порядок с помощью sort_values
?
df.sort_values(['Total Due'])
возвращает отсортированный DF, но он не обновляет DF на месте.
Так что сделайте это явно:
df = df.sort_values(['Total Due'])
или
df.sort_values(['Total Due'], inplace=True)
Моя проблема, к вашему сведению, заключалась в том, что я не возвращал полученный фрейм данных, поэтому PyCharm не удосужился обновить указанный фрейм данных. Присвоение имени фрейму данных после ключевого слова return устранило проблему.
Редактировать:
У меня был return
в конце моего метода вместо
return df
,
который должен был заметить отладчик, потому что df
не обновлялся, несмотря на мою явную сортировку на месте.