在CSV文件中交换列

时间:2016-06-23 14:21:47

标签: python python-2.7 numpy pandas

我有一个csv文件,我需要更改colum索引。我当前的文件是

A   B   C   D   E   F   G
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

但我需要它:

D   F   G   A   B   C   E
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

这只是一个测试用例。我有一个包含1000多列的文件。感谢

2 个答案:

答案 0 :(得分:3)

使用csv.DictReader csv.DictWriter。

import csv
with open('names_in.csv') as csvin, open('names_out.csv', 'w') as csvout:
     reader = csv.DictReader(csvin)
     writer = csv.DictWriter(csvout, fieldnames=["D", "F", "G", "A", "B","C", "E"])
     for row in reader:
        writer.writerow(row)

确保字段名与输入文件中的字段匹配。您只需复制reader.fieldnames并重新排列即可。

答案 1 :(得分:1)

您可以使用pandas.read_csv阅读文件,然后重新排序列并使用to_csv重写您的文件:

import pandas as pd

df = pd.read_csv(your_file)

ncols = 3

cols = df.columns[-ncols:].tolist() + df.columns[:-ncols].tolist()

df[cols].to_csv(your_file)

或一行:

(pd.read_csv(your_file)
        [df.columns[-ncols:].tolist() + df.columns[:-ncols].tolist()]
   .to_csv(your_file, index=False)
)

演示:

In [12]: ncols = 3

In [13]: cols = df.columns[-ncols:].tolist() + df.columns[:-ncols].tolist()

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

In [15]: df
Out[15]:
   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 [16]: df[cols]
Out[16]:
   E  F  G  A  B    C  D
0  1  7  6  1  0  0.5  5
1  0  7  6  2  0  0.6  4
2  1  7  6  3  0  0.7  3
3  0  7  6  4  0  0.8  2