将列值列表拆分为行

时间:2018-02-05 12:15:23

标签: python-3.x csv

我有以下格式的csv:

col1  col2               col3            col4  
'1'   ['Ron', 'jeremy']  [54.5, 78.8]    '1_data'  
'2'   ['roy', 'susan']   [56.7, 34.6]    '2_data'     

我希望csv采用以下格式:

col1  col2     col3  col4  
'1'   'Ron'    54.5  '1_data'  
'1'   'jeremy' 78.8  '1_data'  
'2'   'roy'    56.7  '2_data'
'2'   'susan'  34.6  '2_data'     

我通过使用' pandas'来实现这一目标。但必须使用' csv' python3的模块来做这件事。 任何帮助都会有所帮助。

1 个答案:

答案 0 :(得分:0)

使用列表切片zip()功能:

with open('yourfile.csv', newline='') as f:
    reader = csv.reader(f, skipinitialspace=True, delimiter=' ')

    for i, r in enumerate(reader):
        if i == 0:
            print(r)    # header columns
        else:
            row = [r[0], r[-1]]  # resulting record containing 1st and last column
            slice_len = len(r) - 2
            col2, col3 = [r[p:p+slice_len//2] for p in range(1, slice_len + 1, 2)]
            for pair in zip(col2, col3):
                row[1:-1] = list(map(lambda v: v.strip("[],"), pair))
                print(row)

当前输出(用于演示):

['col1', 'col2', 'col3', 'col4']
["'1'", "'Ron'", '54.5', "'1_data'"]
["'1'", "'jeremy'", '78.8', "'1_data'"]
["'2'", "'roy'", '56.7', "'2_data'"]
["'2'", "'susan'", '34.6', "'2_data'"]

现在,您所需要的只是取消writer = csv.writer(<your_new_file>)并致电writer.writerow(row)而不是print(row)