我有以下格式的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的模块来做这件事。 任何帮助都会有所帮助。
答案 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)