dataframe.columns изменяет порядок списка

Я импортирую данные с разделителями табуляции через pandas и назначаю новые имена столбцов через dataframe.columns = []. Однако при присвоении имен столбцов порядок имен изменяется.

Это мои данные:

"ID_final"  "Value01"   "Value02"   "Value03"   "Value04"   "Value05"   "Value06"   "Value07"   "Value08"   "Value09"   "Value10"   "Value11"   "Value12"
724 0.00332 0.00224 0.00186 0.00131 0.00108 0.09092 0.14388 0.02926 0.01127 0.00829 0.00593 0.00448
1029    0.00317 0.00221 0.00193 0.00139 0.00128 0.04204 0.09327 0.02509 0.01035 0.00776 0.00561 0.00438
1700    0.0051  0.00353 0.00304 0.00233 0.00189 0.13548 0.21747 0.04044 0.01531 0.01173 0.00856 0.00667

И вот что я делаю:

import pandas as pd 

dataframe = pd.read_csv('data.txt', sep='\t') 

header = {
        'ID',
        'January',
        'Febraury',
        'March',
        'April',
        'May',
        'June',
        'July',
        'August',
        'September',
        'October',
        'November',
        'December'}

dataframe.columns = header

После того, как я присвоил имена столбцам, порядок заголовков был изменен и начинается с сентября, а остальные месяцы следуют более или менее случайным образом. Как сохранить порядок header.


person Stücke    schedule 16.08.2019    source источник
comment
Предположительно вы используете Python 3.5 или ниже?   -  person roganjosh    schedule 16.08.2019
comment
Вы можете проверить это решение? stackoverflow.com/questions/36539396/   -  person Shobhit Kumar    schedule 16.08.2019
comment
Просто поместите имена столбцов в список вместо словаря   -  person roganjosh    schedule 16.08.2019
comment
Я использую Spyder IDE 3.3.3 с интерпретатором Python по умолчанию.   -  person Stücke    schedule 16.08.2019
comment
Список вместо дикого работает !! Спасибо!   -  person Stücke    schedule 16.08.2019
comment
передать это как список   -  person Derek Eden    schedule 16.08.2019
comment
Наборы не сохраняют порядок. Фактически, мой первоначальный вопрос не имеет значения, потому что упорядочение применяется только к словарям начиная с версии 3.6 и выше. Наборы по-прежнему неупорядочены.   -  person roganjosh    schedule 16.08.2019


Ответы (1)


Я считаю, что вам нужно передать значения в списке параметру names в read_csv, также необходимо установить header=0 для перезаписи старых имен столбцов:

header = [
        'ID',
        'January',
        'Febraury',
        'March',
        'April',
        'May',
        'June',
        'July',
        'August',
        'September',
        'October',
        'November',
        'December']
dataframe = pd.read_csv('data.txt', sep='\t', header=0, names=header) 

Альтернативное решение - пропустить первые значения заголовка:

dataframe = pd.read_csv('data.txt', sep='\t', skiprows=1, names=header) 

РЕДАКТИРОВАТЬ: Как @roganjosh, упомянутый в вашем решении, передает только список имен столбцов:

dataframe = pd.read_csv('data.txt', sep='\t') 

header = [
        'ID',
        'January',
        'Febraury',
        'March',
        'April',
        'May',
        'June',
        'July',
        'August',
        'September',
        'October',
        'November',
        'December']

dataframe.columns = header
person jezrael    schedule 16.08.2019
comment
Впоследствии они могут переименовать столбцы, проблема в том, что итерация имен, которые они передали, является set, а не list, поэтому порядок не сохраняется. - person roganjosh; 16.08.2019
comment
@roganjosh - Конечно, это другое решение. - person jezrael; 16.08.2019