2016-06-23 4 views
-2

Вопрос был опубликован раньше, но требования не были надлежащим образом переданы. У меня есть CSV-файл с более чем 1000 столбцов:Переупорядочивающие столбцы в CSV

A B C D .... X Y Z 
1 0 0.5 5 .... 1 7 6 
2 0 0.6 4 .... 0 7 6 
3 0 0.7 3 .... 1 7 6 
4 0 0.8 2 .... 0 7 6 

Здесь X, Y и Z являются 999, 1000, 10001 колонку и A, B, C, D являются первой, второй, третьей и четвёртой. Мне нужно изменить порядок столбцов таким образом, чтобы он дал мне следующее.

D Y Z A B C ....X 
5 7 6 1 0 0.5 ....1 
4 7 6 2 0 0.6 ....0 
3 7 6 3 0 0.7 ....1 
2 7 6 4 0 0.8 ....0 

что 4-й столбец становится 1-й, 1000 и 1001th столбец становится второй и третьей, а остальные столбцы сдвигаются вправо соответственно.

+3

Можете ли вы показать, что вы пытались и почему многие [связанные] (http://stackoverflow.com/search?q=pandas+reorder+columns) вопросы не ответить на ваш вопрос? Это просто требует, чтобы вы изменили порядок индекса столбца, а затем «reindex» df, передав новый порядок. – EdChum

+0

Используйте Excel или эквивалент с открытым исходным кодом. –

+0

@EdChum. Да, но есть тысячи столбцов. Как изменить порядок так много столбцов. Существует ли общий способ? Новое в Python –

ответ

1

Итак, вопрос заключается в том, как изменить порядок столбцов по-своему.

Например у вас есть следующий DF, и вы хотите, чтобы изменить порядок столбцов следующим образом (индексы):

5, 3, остальное ...

DF

In [82]: df 
Out[82]: 
    A B C D E F G 
0 1 0 0.5 5 1 7 6 
1 2 0 0.6 4 0 7 6 
2 3 0 0.7 3 1 7 6 
3 4 0 0.8 2 0 7 6 

колонны

In [83]: cols = df.columns.tolist() 

In [84]: cols 
Out[84]: ['A', 'B', 'C', 'D', 'E', 'F', 'G'] 

заказана:

In [88]: cols = [cols.pop(5)] + [cols.pop(3)] + cols 

In [89]: cols 
Out[89]: ['F', 'D', 'A', 'B', 'C', 'E', 'G'] 

In [90]: df[cols] 
Out[90]: 
    F D A B C E G 
0 7 5 1 0 0.5 1 6 
1 7 4 2 0 0.6 0 6 
2 7 3 3 0 0.7 1 6 
3 7 2 4 0 0.8 0 6 
+0

@DigantaBharali, это помогло? – MaxU

+0

yup это то, что я ищу. Оно работает –

0
In [4]: df 
Out[4]: 
    A B C D X Y Z 
0 1 0 0.5 5 1 7 6 
1 2 0 0.6 4 0 7 6 
2 3 0 0.7 3 1 7 6 
3 4 0 0.8 2 0 7 6 

In [5]: df.reindex(columns=['D','Y','Z','A','B','C','X']) 
Out[5]: 
    D Y Z A B C X 
0 5 7 6 1 0 0.5 1 
1 4 7 6 2 0 0.6 0 
2 3 7 6 3 0 0.7 1 
Смежные вопросы