用Python转置表的一部分
我需要帮助在python中构建脚本,转换csv的一部分,如下例所示:用Python转置表的一部分,python,Python,我需要帮助在python中构建脚本,转换csv的一部分,如下例所示: [[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]] 它: 有人用python对csv/xls进行过这种转换吗 [row[:3] for row in my_table] 将只显示前3列 或者,我想你可以把它转置到列中,得到前3个,然后再转置回来 transposed_t
[[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]]
它:
有人用python对csv/xls进行过这种转换吗
[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])
如果您可以使用
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']]
您可以结合使用列表切片、嵌套列表理解和
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:]]))
之后,结果
为
[['0A', '0B', '0C'],
['01', '02', '03'],
['01', '02', '04'],
['01', '02', '05'],
...
['19', '20', '23'],
['19', '20', '24']]
这不是转置…你真的有列表吗?这实际上并不是一个换位操作,你是如何从输入到输出的?你可能会错误地使用术语。你能描述一下你到底打算怎么做吗?我举了一个例子,但我会说真实的数据来变得更直接。我在excel中处理来自尼尔森的数据,第一列聚合和最后一列是日期,所以我只想有一个日期列,并为每个日期重复列聚合。这就好像cols是:agreg1,agreg2,date1,date2,…,date24,只需要agreg1,agreg2和date。非常酷,但只有前两列必须重复,其他列是日期列,只需要一个日期列,所以我为每个日期列重复行的前两列完美!我将根据我的实际问题(更高)修改代码,并将反馈给具有相同挑战的同事!!谢谢大家!!
[['0A', '0B', '0C'],
['01', '02', '03'],
['01', '02', '04'],
['01', '02', '05'],
...
['19', '20', '23'],
['19', '20', '24']]