How to transpose a dataset in a csv file?

后端 未结 7 995
太阳男子
太阳男子 2020-11-30 01:32

For example, i would like to transform:

Name,Time,Score
Dan,68,20
Suse,42,40
Tracy,50,38

Into:

Name,Dan,Suse,Tracy
Time,68,         


        
相关标签:
7条回答
  • 2020-11-30 01:44

    If the whole file contents fits into memory, you can use

    import csv
    from itertools import izip
    a = izip(*csv.reader(open("input.csv", "rb")))
    csv.writer(open("output.csv", "wb")).writerows(a)
    

    You can basically think of zip() and izip() as transpose operations:

    a = [(1, 2, 3),
         (4, 5, 6),
         (7, 8, 9)]
    zip(*a)
    # [(1, 4, 7),
    #  (2, 5, 8),
    #  (3, 6, 9)]
    

    izip() avoids the immediate copying of the data, but will basically do the same.

    0 讨论(0)
  • 2020-11-30 01:51

    Read the CSV into pandas data frame, pandas has build in function for transpose which can be invoked as below.

    import pandas as pd
    
    csv = pd.read_csv("test.csv", skiprows=1)
    # use skiprows if you want to skip headers
    df_csv = pd.DataFrame(data=csv)
    transposed_csv = df_csv.T
    print(transposed_csv)
    
    0 讨论(0)
  • 2020-11-30 01:53

    Transfer from input.csv to output.csv. Pandas can also help.

    import pandas as pd
    pd.read_csv('input.csv', header=None).T.to_csv('output.csv', header=False, index=False)
    
    0 讨论(0)
  • 2020-11-30 01:57

    Same answer of nosklo (all credits to him), but for python3:

    from csv import reader, writer 
    with open('source.csv') as f, open('destination.csv', 'w') as fw: 
        writer(fw, delimiter=',').writerows(zip(*reader(f, delimiter=',')))
    
    0 讨论(0)
  • 2020-11-30 01:58

    The simplest way is:

    import numpy as np
    import pandas as pd
    
    _mat = pd.read_csv("test.csv")
    _mat = _mat[_mat.columns[0:3]].values
    _t_mat = np.transpose(_mat)
    

    Result:

    • Input matrix is : [[1 2 3] [4 5 6]]
    • the output is: [[1 4] [2 5] [3 6]]
    0 讨论(0)
  • 2020-11-30 02:06

    If lines is the list of your original text than it should be

    for i in range(1,len(lines)):
        lines[i] = lines[i].split(',')
    
    new_lines = []
    for i in range(len(lines[0])):
        new_lines.append("%s,%s,%s" % (lines[0][i], lines[1][i], lines[2][i]))
    

    or use csv Python module - http://docs.python.org/library/csv.html

    0 讨论(0)
提交回复
热议问题