Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does my Pandas DataFrame not display new order using `sort_values`?

New to Pandas, so maybe I'm missing a big idea? I have a Pandas DataFrame of register transactions with shape like (500,4):

Time              datetime64[ns] Net Total                float64 Tax                      float64 Total Due                float64 

I'm working through my code in a Python3 Jupyter notebook. I can't get past sorting any column. Working through the different code examples for sort, I'm not seeing the output reorder when I inspect the df. So, I've reduced the problem to trying to order just one column:

df.sort_values(by='Time') # OR df.sort_values(['Total Due']) # OR df.sort_values(['Time'], ascending=True) 

No matter which column title, or which boolean argument I use, the displayed results never change order.

Thinking it could be a Jupyter thing, I've previewed the results using print(df), df.head(), and HTML(df.to_html()) (the last example is for Jupyter notebooks). I've also rerun the whole notebook from import CSV to this code. And, I'm also new to Python3 (from 2.7), so I get stuck with that sometimes, but I don't see how that's relevant in this case.

Another post has a similar problem, Python pandas dataframe sort_values does not work. In that instance, the ordering was on a column type string. But as you can see all of the columns here are unambiguously sortable.

Why does my Pandas DataFrame not display new order using sort_values?

like image 331
xtian Avatar asked Mar 05 '17 20:03

xtian


People also ask

How do you arrange a DataFrame in ascending order?

To sort the DataFrame based on the values in a single column, you'll use . sort_values() . By default, this will return a new DataFrame sorted in ascending order. It does not modify the original DataFrame.

How do I force a panda to display all rows?

Set value of display. max_rows to None and pass it to set_option and this will display all rows from the data frame.

How do I set a column order in pandas?

Another way to reorder columns is to use the Pandas . reindex() method. This allows you to pass in the columns= parameter to pass in the order of columns that you want to use.


1 Answers

df.sort_values(['Total Due']) returns a sorted DF, but it doesn't update DF in place.

So do it explicitly:

df = df.sort_values(['Total Due']) 

or

df.sort_values(['Total Due'], inplace=True) 
like image 71
MaxU - stop WAR against UA Avatar answered Sep 22 '22 15:09

MaxU - stop WAR against UA