# Change the order of columns in a Python Pandas DataFrame

**URL:** https://sentry.io/answers/change-the-order-of-columns-in-a-python-pandas-dataframe/

---

## The Problem

How can I change the order of columns in a Python Pandas DataFrame?

## The Solution

Pandas allows us to change the order of columns in a DataFrame by passing in a reordered list of column names:

```python
import pandas

data = {
    "Product": ["Apple", "Orange", "Pear"],
    "Selling Price": [2, 3, 4],
    "Cost Price": [1, 2, 3],
}
df = pandas.DataFrame(data)
print(df)

# output:
#   Product  Selling Price  Cost Price
# 0   Apple              2           1
# 1  Orange              3           2
# 2    Pear              4           3

df = df[["Product", "Cost Price", "Selling Price"]]
print(df)

# output:
#   Product  Cost Price  Selling Price
# 0   Apple           1              2
# 1  Orange           2              3
# 2    Pear           3              4
```

In some cases, we may want to reorder columns programmatically rather than manually. We can do this by casting `df.columns.values` to a list and using standard list methods on it before passing it back to `df[]`. For example, we could use the following code to programmatically perform the same reordering as above:

```python
import pandas

data = {
    "Product": ["Apple", "Orange", "Pear"],
    "Selling Price": [2, 3, 4],
    "Cost Price": [1, 2, 3],
}
df = pandas.DataFrame(data)
print(df)

# output:
#   Product  Selling Price  Cost Price
# 0   Apple              2           1
# 1  Orange              3           2
# 2    Pear              4           3

column_names = list(df.columns.values) # will be ["Product", "Selling Price", "Cost Price"]
column_names.insert(1, column_names[-1])  # insert last element of list at index 1
column_names.pop()  # remove last element of list
df = df[column_names]
print(df)

# output:
#   Product  Cost Price  Selling Price
# 0   Apple           1              2
# 1  Orange           2              3
# 2    Pear           3              4
```

We could also use this technique to sort our columns alphabetically, using [`list.sort`](https://docs.python.org/3/library/stdtypes.html#list.sort).

```python
import pandas

data = {
    "Product": ["Apple", "Orange", "Pear"],
    "Selling Price": [2, 3, 4],
    "Cost Price": [1, 2, 3],
}
df = pandas.DataFrame(data)
print(df)

# output:
#   Product  Selling Price  Cost Price
# 0   Apple              2           1
# 1  Orange              3           2
# 2    Pear              4           3

column_names = list(df.columns.values) # will be ["Product", "Selling Price", "Cost Price"]
column_names.sort()  # sort names alphabetically
df = df[column_names]
print(df)

# output:
#    Cost Price Product  Selling Price
# 0           1   Apple              2
# 1           2  Orange              3
# 2           3    Pear              4
```

---

*Source: [sentry.io/answers/change-the-order-of-columns-in-a-python-pandas-dataframe/](https://sentry.io/answers/change-the-order-of-columns-in-a-python-pandas-dataframe/)*
