Python: Как заставить pandas сортировать столбцы в наборе данных? - PullRequest
2 голосов
/ 19 апреля 2020

У меня есть набор данных ниже

df = pd.DataFrame({2002:[None, None, 2, 4, 5],  
                   "Facility":[5, 5, 6, 44, 2], 
                   2003:[None, None, None, 1, 5], 
                   2004 : [ 4,4,3,2,6]})

, и мне нужно отсортировать столбцы, для этого я использую следующий код

df = df.reindex(sorted(df.columns), axis=1)

, однако он жалуется на следующую ошибку:

TypeError: '<' not supported between instances of 'str' and 'int'

Я знаю, что появляется ошибка, поскольку одно из имен столбцов имеет тип str, но как я могу решить эту проблему?

Мой ответ в избранном имеет отсортированные столбцы, как показано ниже:

'Facility',2002,2003,2004

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Вы почти на месте.

Как вы уже упоминали, ваши colnames представляют собой комбинацию String и int, поэтому сортировка не удалась. Таким образом, вы можете сделать следующее для сортировки столбцов

df.columns.astype(str)
0 голосов
/ 19 апреля 2020

Настройка: убедитесь, что все значения, которые должны быть строками, являются str, а целые числа являются int

1) Получите список столбцов:

my_columns = list(df.columns)

2) Убрать «Facility» из списка:

my_columns.remove("Facility")

3) Сортировать список целых чисел:

my_columns.sort()

4) Вставьте средство в начало списка:

my_columns.insert(0, "Facility")

5) Переупорядочьте DataFrame с недавно заказанным my_columns:

df = df[my_columns]

6) Измените столбцы обратно на все строки, например:

df.columns.astype(str)

...