Невозможно переупорядочить данные столбцов

У меня есть фрейм данных, а не последовательности. если я использую len(df.columns), мои данные имеют 3586 столбцов. Как изменить порядок последовательностей данных?

ID  V1  V10 V100 V1000 V1001 V1002 ...  V990 V991 V992 V993 V994
A   1   9.0 2.9  0.0   0.0   0.0   0.0  0.0  0.0  0.0  0.0  0.0
B   1   1.2 0.1  3.0   0.0   0.0   0.0  1.0  0.0  0.0  0.0  0.0
C   2   8.6 8.0  2.0   0.0   0.0   0.0  2.0  0.0  0.0  0.0  0.0
D   3   0.0 2.0  0.0   0.0   0.0   0.0  3.0  0.0  0.0  0.0  0.0
E   4   7.8 6.6  3.0   0.0   0.0   0.0  4.0  0.0  0.0  0.0  0.0

Я использовал это df = df.reindex(sorted(df.columns), axis=1) (на основе этого вопроса Изменение порядка столбцов в фрейме данных pandas на основе имени столбца), но все еще не работает.

Спасибо

использовать data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)

Nihal 08.04.2019 11:38

это в ответе на то, что вы разместили, и sorted(df.columns) будет сортировать список на основе строки, а не на основе int, потому что у вас есть V

Nihal 08.04.2019 11:39

@Nihal - у меня ошибка could not convert string to float: 'ac'

Arief 08.04.2019 11:44

что такое ac?? в вашем фрейме данных? не могли бы вы опубликовать вывод print(list(df.columns))

Nihal 08.04.2019 11:56

@Nihal - я использовал print(list(df.columns)), и результатом является идентификатор и все буквы «V» с номером, но не с последовательностью. Я не знаю, откуда берется ac

Arief 08.04.2019 12:09

@Arief - отредактированный ответ, он должен работать и со столбцами ac.

jezrael 08.04.2019 12:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
6
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала получите все столбцы без шаблона V + number путем фильтрации с помощью str.contains, затем отсортируйте все остальные значения с помощью Index.difference, сложите вместе и перейдите к DataFrame.reindex — сначала получите все нечисловые несовпадающие столбцы в первых позициях, а затем отсортируйте столбцы V + number:

L1 = df.columns[~df.columns.str.contains('^V\d+$')].tolist()

L2 = sorted(df.columns.difference(L1), key=lambda x: float(x[1:]))

df = df.reindex(L1 + L2, axis=1)
print (df)
   ID   V1  V10  V100  V990  V991  V992  V993  V994  V1000  V1001  V1002
A   1  9.0  2.9   0.0   0.0   0.0   0.0   0.0   0.0    0.0    0.0    0.0
B   1  1.2  0.1   3.0   1.0   0.0   0.0   0.0   0.0    0.0    0.0    0.0
C   2  8.6  8.0   2.0   2.0   0.0   0.0   0.0   0.0    0.0    0.0    0.0
D   3  0.0  2.0   0.0   3.0   0.0   0.0   0.0   0.0    0.0    0.0    0.0
E   4  7.8  6.6   3.0   4.0   0.0   0.0   0.0   0.0    0.0    0.0    0.0

Другие вопросы по теме