Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas: create dataframe without auto ordering column names alphabetically

I am creating an initial pandas dataframe to store results generated from other codes: e.g.

result = pd.DataFrame({'date': datelist, 'total': [0]*len(datelist), 
                       'TT': [0]*len(datelist)})

with datelist a predefined list. Then other codes will output some number for total and TT for each date, which I will store in the result dataframe.

So I want the first column to be date, second total and third TT. However, pandas will automatically reorder it alphabetically to TT, date, total at creation. While I can manually reorder this again afterwards, I wonder if there is an easier way to achieve this in one step.

I figured I can also do

result = pd.DataFrame(np.transpose([datelist, [0]*l, [0]*l]),
                      columns = ['date', 'total', 'TT'])

but it somehow also looks tedious. Any other suggestions?

like image 309
hurrikale Avatar asked Oct 04 '16 21:10

hurrikale


People also ask

How do I rearrange column names in pandas?

Reorder Columns using 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.

How do I reorder columns in pandas alphabetically?

You can change the order of columns in the pandas dataframe using the df. reindex() method.

How do I sort a pandas DataFrame based on a column?

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.


1 Answers

You can pass the (correctly ordered) list of column as parameter to the constructor or use an OrderedDict:

# option 1:
result = pd.DataFrame({'date': datelist, 'total': [0]*len(datelist), 
                   'TT': [0]*len(datelist)}, columns=['date', 'total', 'TT'])

# option 2:
od = collections.OrderedDict()
od['date'] = datelist
od['total'] = [0]*len(datelist)
od['TT'] = [0]*len(datelist)
result = pd.DataFrame(od)
like image 146
wonce Avatar answered Oct 06 '22 00:10

wonce