hurrikale hurrikale - 2 months ago 10
Python Question

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?

Answer

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)
Comments