2015-06-30 4 views
0

мне нужна помощь в создании сценария в Python перенося часть CSV, как в примере ниже:транспонирования часть таблицы с Python

[[0A,0B,0C,0D,0E,0F] 
[01,02,03,04,05,06] 
[07,08,09,10,11,12] 
[13,14,15,16,17,18] 
[19,20,21,22,23,24]] 

это:

[[0A, 0B, 0C] 
[01,02,03] 
[01,02,04] 
[01,02,05] 
[01,02,06] 
[07,08,09] 
[07.08, 10] 
[07,08,11] 
. 
. 
. 
[19,20,24]] 

Кто-нибудь сделал такой перенос csv/xls с python?

+1

Это не транспонирование ... –

+1

У вас на самом деле есть список списков? И это на самом деле не представляет собой операцию транспонирования, как вы получили от своего ввода на ваш вывод? – jonrsharpe

+0

Вы можете неправильно использовать терминологию. Можете ли вы описать «как» вы намерены делать actallY? –

ответ

0

Вы можете использовать комбинацию среза списка, вложенными списковых и itertools.chain:

M = [['0A','0B','0C','0D','0E','0F'], 
    ['01','02','03','04','05','06'], 
    ['07','08','09','10','11','12'], 
    ['13','14','15','16','17','18'], 
    ['19','20','21','22','23','24']] 

from itertools import chain 
result = [M[0][:3]] + list(chain(*[[x[:2] + [y] for y in x[2:]] for x in M[1:]])) 

Впоследствии result является

[['0A', '0B', '0C'], 
['01', '02', '03'], 
['01', '02', '04'], 
['01', '02', '05'], 
... 
['19', '20', '23'], 
['19', '20', '24']] 
+0

Отлично! Я буду адаптировать код к моей реальной проблеме (что намного выше) и поставить отзыв коллегам, у которых есть тот же вызов !! Спасибо вам всем !! – sn3fru

0
[row[:3] for row in my_table] 

даст вам только первые 3 колонки

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

transposed_table = zip(*my_table) 
my_cols = transposed_table[:3] 
transposed_back_to_rows = zip(*my_cols) 

или, если вы действительно хотите на одной линии

zip(*list(zip(*my_table))[:3]) 
0

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

Пример -

import numpy as np 

n = np.array([['0A','0B','0C','0D','0E','0F'], 
['01','02','03','04','05','06'], 
['07','08','09','10','11','12'], 
['13','14','15','16','17','18'], 
['19','20','21','22','23','24']]) 

print('n - ' + str(n)) 

n1 = np.append(n[:,:3],n[:,3:], axis = 0) 

print('n1 - ' + str(n1)) 

Выход -

n - [['0A' '0B' '0C' '0D' '0E' '0F'] 
['01' '02' '03' '04' '05' '06'] 
['07' '08' '09' '10' '11' '12'] 
['13' '14' '15' '16' '17' '18'] 
['19' '20' '21' '22' '23' '24']] 
n1 - [['0A' '0B' '0C'] 
['01' '02' '03'] 
['07' '08' '09'] 
['13' '14' '15'] 
['19' '20' '21'] 
['0D' '0E' '0F'] 
['04' '05' '06'] 
['10' '11' '12'] 
['16' '17' '18'] 
['22' '23' '24']] 
+0

очень круто, но только первые 2 столбца должны повторяться, остальные столбцы - столбцы даты и просто хотят столбца даты, поэтому я повторяю первые 2 столбца строки для каждого столбца даты. – sn3fru

Смежные вопросы