使用Python重新排列csv中的数据

时间:2017-08-14 20:12:18

标签: python csv

我有一个.csv文件,格式如下:

A   B   C   D   E   F
X1  X2  X3  X4  X5  X6
Y1  Y2  Y3  Y4  Y5  Y6
Z1  Z2  Z3  Z4  Z5  Z6

我想要的是什么:

A   X1
B   X2
C   X3
D   X4
E   X5
F   X6
A   Y1
B   Y2
C   Y3
D   Y4
E   Y5
F   Y6
A   Z1
B   Z2
C   Z3
D   Z4
E   Z5
F   Z6

我无法围绕内置的转置函数进行思考,以实现最终结果。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:7)

您可以使用pandas简单地融化数据框:

import pandas as pd

df = pd.read_csv(csv_filename)
>>> pd.melt(df)
   variable value
0         A    X1
1         A    Y1
2         A    Z1
3         B    X2
4         B    Y2
5         B    Z2
6         C    X3
7         C    Y3
8         C    Z3
9         D    X4
10        D    Y4
11        D    Z4
12        E    X5
13        E    Y5
14        E    Z5
15        F    X6
16        F    Y6
17        F    Z6

纯python解决方案如下:

file_out_delimiter = ','  # Use '\t' for tab delimited.
with open(filename, 'r') as f, open(filename_out, 'w') as f_out:
    headers = f.readline().split()
    for row in f:
        for pair in zip(headers, row.split()):
            f_out.write(file_out_delimiter.join(pair) + '\n')  

产生以下文件内容:

A,X1
B,X2
C,X3
D,X4
E,X5
F,X6
A,Y1
B,Y2
C,Y3
D,Y4
E,Y5
F,Y6
A,Z1
B,Z2
C,Z3
D,Z4
E,Z5
F,Z6