pandas保存CSV文件时已指定列仍全部合并为单列问题
问题成因
导出的CSV内容全部挤在同一列的核心原因是str(expcsvdf)的用法完全不符合CSV文件的生成逻辑:
str()转换DataFrame时,pandas会返回控制台打印用的格式化纯文本,内容包含对齐用的空格、排版边框、默认行索引,本质是给人肉眼看的展示内容,不是用逗号分隔字段的结构化CSV数据- 这种无标准分隔符的纯文本被写入.csv后缀的文件后,表格软件无法识别列边界,自然会把所有内容归到同一列
- 直接去掉
str()后程序能运行是因为文件写入接口会尝试将DataFrame对象序列化,但这种写法没有经过CSV格式规范转换,依然存在格式错乱、内容缺失的风险,不是合规的导出方式。
正确实现方案
使用pandas内置的to_csv()方法完成导出,不需要手动调用str()转换,也不需要手动拼接内容,两种常用写法如下:
写法1:直接传入文件路径(最简洁,推荐)
不需要手动打开/关闭文件,pandas会自动处理文件IO:
expcsv = {'PREDICTION OF' : ['CUTTING TEMPERATURE :','SURFACE ROUGHNESS :','CUTTING FORCE X :', 'CUTTING FORCE Y :','CUTTING FORCE Z :'], 'VALUE' : [out_arrct,out_arrra,out_arrfx,out_arrfy,out_arrfz], 'METRICS' : ['°C','μm','N','N','N'] } expcsvdf = pd.DataFrame(expcsv, columns=['PREDICTION OF', 'VALUE', 'METRICS']) data = [("csv file(*.csv)","*.csv")] file = asksaveasfilename(filetypes = data, defaultextension = data) # 导出为标准CSV,不导出行索引,指定utf-8编码 expcsvdf.to_csv(file, encoding="utf-8", index=False)
写法2:传入已打开的文件对象(适合需要追加写入其他内容的场景)
如果需要在同一个CSV里写入DataFrame之外的自定义内容,可以手动打开文件后将对象传给to_csv():
with open(file,"w", encoding="utf-8") as f: # 先写入DataFrame内容 expcsvdf.to_csv(f, index=False) # 后续可继续写入其他自定义内容,比如备注行 # f.write("备注:以上数据为模型预测结果\n")
额外注意事项
- 必须传入
index=False参数,否则pandas会默认把DataFrame的行序号作为单独一列写入,多出无意义的索引列 - 如果导出的CSV用Windows自带的Excel打开出现中文乱码,可将编码参数改为
utf-8-sig,适配Excel的默认编码识别规则。
内容的提问来源于stack exchange,提问作者Zoelion
相关产品推荐
相关产品推荐

