Reputation: 345
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?
Upvotes: 15
Views: 14991
Reputation: 8884
Use pandas >= 0.23 in combination with Python >= 3.6.
result = pd.DataFrame({'date': datelist,
'total': [0]*len(datelist),
'TT': [0]*len(datelist)})
retains the dict's insertion order when creating a DataFrame (or Series) from a dict when using pandas v0.23.0 in combination with Python3.6.
Upvotes: 2
Reputation: 1921
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)
Upvotes: 15
Reputation: 1089
result = pd.DataFrame({'date': [23,24], 'total': 0,
'TT': 0},columns=['date','total','TT'])
Upvotes: 3