我一直在使用 python 进行列切换
my_array[:,[0, 1]] = my_array[:,[1, 0]]
但我现在需要使其更加通用。它应该适用于多列和多个机器,例如“input.txt 的第一列变成output.txt 的第二列,输入的第三列变成输出的第五列...”
我已经尝试过
my_array[:,[1,0,4,3,2]] = my_array[:,[1,2,3,4,5]]
我还可以创建一个名为 col_map.txt 的文件,并且程序应该根据 col_map.txt 中编写的此规则来排列列
col_map.txt
1,2 #1st column of input.txt goes to 2nd column of output.txt
2,1 #2 and 1, respectively
3,5 #3 and 4, respectively
4,4 #4 and 4, respectively, so the position doesn't change
5,3 #5 and 3, respectively
但我还没能尝试这个想法。
最佳答案
在您尝试的过程中,您可能忘记了右侧索引是从零开始的。无论如何,使用 Numpy 数组,仅尝试:
my_array = my_array[:,[1,0,4,3,2]]
你想实现什么目标?您是否使用大型输入文件?
由于您似乎有一个“input.txt”,因此您可以使用 bash 命令,例如 awk
:
awk '{print $2,$1,$5,$4,$3}' 输入.txt > 输出.txt
您可能需要在输入和输出中指定字段分隔符:
awk 'BEGIN{FS="\t";OFS="\t";} {print $2,$1,$5,$4,$3}' 输入.txt > 输出.txt
回到Python,如果你的输入文件很大,你不想加载数组中的所有内容,而是一次读取一行,将其拆分,然后在切换元素后将该行重写到输出文件(a建议查看 operator.itemgetter
进行项目选择)。
关于python - 使用 python 最通用的列映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25114152/