Python将列表写入CSV时多列数据合并至单格问题求助
问题原因
csv.writer的writerow()方法接收的列表参数中,每个元素对应CSV一行中的一个单元格。如果传入的列表元素是包含多个值的子列表,会被整体识别为单个单元格的内容,因此出现多值挤在同一个单元格的问题。- 你的数据是按列存储的结构,而CSV写入默认是按行写入,需要先完成行列转置再写入。
解决代码
首先确认你的原始计算结果为如下按列存储的结构(即每个子列表对应一列的所有数据):
# 示例原始数据:共5列,每列5条数据 col_data = [ [0.002, 0.001905, 0.001814, 0.001726, 0.00164], # A列数据 [0, 0.001814, 0.00173, 0.001648, 0.00157], # B列数据 [0, 0, 0.001649, 0.00157, 0.001495], # C列数据 [0, 0, 0, 0.001495, 0.001424], # D列数据 [0, 0, 0, 0, 0.001356] # E列数据 ]
修改后的写入代码如下:
import csv # 替换为你自己的计算得到的列存储数据 col_data = [] # 完成行列转置,得到按行存储的结构,每个子列表对应CSV的一行 row_data = list(zip(*col_data)) # 打开文件时添加newline参数避免多余空行 with open("/home/Documents/test.csv", "a", newline="") as fp: wr = csv.writer(fp, dialect='excel') # 一次性写入所有行 wr.writerows(row_data)
补充说明
- 如果你需要添加表头,可在调用
writerows()之前新增一行代码:wr.writerow(["A列", "B列", "C列", "D列", "E列"]),替换为你自己的列名即可 - 确保传入
writerow/writerows的子列表中所有元素都是单个数值/字符串,而非嵌套的列表/数组,即可保证每个值写入单独的单元格 - 如果是在Windows系统下使用Excel打开CSV出现乱码,可以将打开文件的编码设置为
encoding="utf-8-sig"
内容的提问来源于stack exchange,提问作者satyam sangeet
相关产品推荐
相关产品推荐

