如何格式化和合并单个CSV文件中的列



我是Python的新手,我看过CSV文档,也看过一些Stack Overflow示例,但似乎做不好。我有一个CSV文件,其中的数据如下:

IDCJAC001066062,2019,01,01,31.6,1,Y

Index[2:5]是日期的元素,所以我想合并这些列,并在年月日之间有一个"-",这样我就可以使用新创建的CSV创建带有matplotlib的绘图。需要明确的是,新CSV文件中所需的输出为:

IDCJAC001066062,2019-01-01,31.6,1,Y

到目前为止,我的代码是:

with open(file_in, newline='') as f_in, open(file_out, 'w') as f_out:
reader = csv.reader(f_in, delimiter=',')
new_row = []
for row in reader:
new_row.append(row[0: 2])
amended_row = '-'.join(row[2:5])
new_row.append(amended_row)
new_row.append(row[5:])

我得到的输出是:

[IDCJAC010','66062'],'2019-01-05','37.8','1','Y']

您在这里混合了字符串和列表。

row[0: 2]返回第一行的字符串列表['IDCJAC0010', '66062']。但是'-'.join(row[2:5])产生了纯字符串'2019-01-05'

解决这个问题有不同的方法。一种方法是,当您想添加部分列表中的所有元素时,使用new_row.extend(row[0:2])

我通常所做的是,我坚持使用+=运算符来扩展我的列表。如果您希望您的代码看起来也一致,请将字符串'-'.join(row[2:5])包装在如下列表中:['-'.join(row[2:5])]

with open(file_in, newline='') as f_in, open(file_out, 'w') as f_out:
reader = csv.reader(f_in, delimiter=',')
writer = csv.writer(f_out, delimiter=',')
for row in reader:
new_row = []
new_row += row[0:2]
new_row += ['-'.join(row[2:5])]
new_row += row[5:]
writer.writerow(new_row)

您需要使用new_row.extend(row[0: 2])new_row.append(row[5:])来避免列表中包含列表。

最新更新