Pandas: crea el dataframe sin ordenar automáticamente los nombres de las columnas alfabéticamente

Estoy creando un dataframe de pandas inicial para almacenar los resultados generados a partir de otros códigos: por ejemplo,

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

con datelist una lista predefinida. Luego, otros códigos emitirán algún número para el total y TT para cada date , que almacenaré en el dataframe del result .

Así que quiero que la primera columna sea date , segunda total y tercera TT . Sin embargo, los pandas automáticamente lo reordenarán alfabéticamente a TT , date , total en la creación. Si bien puedo reordenar manualmente de nuevo después, me pregunto si hay una manera más fácil de lograrlo en un solo paso.

Pensé que también puedo hacer

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

pero de alguna manera también parece tedioso. ¿Cualquier otra sugerencia?

Puede pasar la lista de columnas (ordenadas correctamente) como parámetro al constructor o usar un 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) 
 result = pd.DataFrame({'date': [23,24], 'total': 0, 'TT': 0},columns=['date','total','TT']) 

Use pandas> = 0.23 en combinación con Python> = 3.6.

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

conserva el orden de inserción del dict cuando se crea un DataFrame (o Series) a partir de un dict cuando se usa pandas v0.23.0 en combinación con Python3.6.

Consulte https://pandas.pydata.org/pandas-docs/version/0.23.0/whatsnew.html#whatsnew-0230-api-breaking-dict-insertion-order .