如何使用to_csv函数避免CSV格式错乱及数据合并为单列问题
问题描述
我用Python的pandas写了一段代码,读取一个包含6列的建材数据库CSV文件,功能如下:
- 接收用户输入的材料名称,验证是否存在于数据库中
- 若存在则输出对应的Unique ID;若不存在则收集材料强度、成本、寿命等信息,生成新条目并用
pandas.concat添加到数据库
但新增条目后用to_csv保存时,原CSV的逗号分隔格式被改成了制表符分隔,导致后续运行代码时无法识别ICE DB Name等列,所有数据合并成了单列。
原数据库CSV(逗号分隔)示例:
Unique ID,ICE DB Name,EC per kg,Strength,Cost,Lifespan 52bdfeb3-979f-4fcd-b4eb-6ffbda643c52,"Aggregates and sand, general UK, mixture of land won, marine, secondary and recycled, bulk, loose",0.01,0,0,0 ...
保存后的错误格式(制表符分隔)示例:
Unique ID ICE DB Name EC per kg Strength Cost Lifespan 52bdfeb3-979f-4fcd-b4eb-6ffbda643c52 Aggregates and sand, general UK, mixture of land won, marine, secondary and recycled, bulk, loose 0.01 0.0 0.0 0 ...
核心代码片段:
import pandas as pd import uuid ... df.to_csv('building_materials_DB.csv', index=False, sep='\t') ...
需要调整代码,确保to_csv保存时不改变原CSV的格式。
解决方案
问题根源是你调用to_csv时显式指定了sep='\t'(制表符分隔),而原文件是逗号分隔的CSV,修改方法如下:
- 最简修改:移除
sep='\t'参数
pandas的to_csv默认分隔符就是逗号,直接删除这个参数就能保持原格式:
df.to_csv('building_materials_DB.csv', index=False)
- 显式指定逗号分隔符(更稳妥)
如果担心默认行为有变化,可明确指定逗号作为分隔符,同时开启quoting参数,确保像ICE DB Name这类包含逗号的字段会被正确用引号包裹,避免后续读取出错:
import csv df.to_csv('building_materials_DB.csv', index=False, sep=',', quoting=csv.QUOTE_NONNUMERIC)
另外,读取文件时建议也显式指定分隔符为逗号,避免pandas自动识别错误:
df = pd.read_csv('building_materials_DB.csv', sep=',')
内容的提问来源于stack exchange,提问作者J Dom
相关产品推荐
相关产品推荐

