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

2024-05-19 14:13:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,我浏览了CSV文档,并查看了一些堆栈溢出示例,但似乎无法正确理解。我有一个CSV文件,其中包含如下数据:

IDCJAC0010,66062,2019,01,01,31.6,1,Y

索引[2:5]是日期的元素,因此我希望合并这些列,并在年-月-日之间使用“-”,这样我就可以使用新创建的CSV创建带有matplotlib的绘图。需要明确的是,新CSV文件中所需的输出为:

IDCJAC0010,66062,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:])

我得到的结果是:

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


Tags: 文件csvin文档newasopenout
2条回答

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

您正在混合字符串和列表

row[0: 2]返回第一行的字符串列表。 但是'-'.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)

相关问题 更多 >