Python 3.7+ or CPython 3.6
Dicts preserve insertion order in Python 3.7+. Same in CPython 3.6, but it's an implementation detail.
>>> x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
>>> {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}
or
>>> dict(sorted(x.items(), key=lambda item: item[1]))
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}
Older Python
It is not possible to sort a dictionary, only to get a representation of a dictionary that is sorted. Dictionaries are inherently orderless, but other types, such as lists and tuples, are not. So you need an ordered data type to represent sorted values, which will be a list—probably a list of tuples.
For instance,
import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))
sorted_x
will be a list of tuples sorted by the second element in each tuple. dict(sorted_x) == x
.
And for those wishing to sort on keys instead of values:
import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))
In Python3 since unpacking is not allowed we can use
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=lambda kv: kv[1])
If you want the output as a dict, you can use collections.OrderedDict
:
import collections
sorted_dict = collections.OrderedDict(sorted_x)
Best Answer
RENAME SPECIFIC COLUMNS
Use the
df.rename()
function and refer the columns to be renamed. Not all the columns have to be renamed:Minimal Code Example
The following methods all work and produce the same output:
Remember to assign the result back, as the modification is not-inplace. Alternatively, specify
inplace=True
:From v0.25, you can also specify
errors='raise'
to raise errors if an invalid column-to-rename is specified. See v0.25rename()
docs.REASSIGN COLUMN HEADERS
Use
df.set_axis()
withaxis=1
andinplace=False
(to return a copy).This returns a copy, but you can modify the DataFrame in-place by setting
inplace=True
(this is the default behaviour for versions <=0.24 but is likely to change in the future).You can also assign headers directly: