Python Pandas:如何在指定列的空单元格中添加两个引号
Pandas导出CSV时引号重复的问题解析与解决方案
首先得搞清楚为什么会出现这种引号越变越多的情况——这其实是CSV格式的标准转义规则在起作用,Pandas的to_csv方法默认遵循这个规则:
背后的机制
当你用fillna('""')把空值填充成两个双引号后,DataFrame里存储的确实是""这个字符串。但调用to_csv时,默认的quoting参数是csv.QUOTE_MINIMAL,这个参数的逻辑是:
- 只要单元格内容包含分隔符(这里是
;)、双引号或者换行符,就会自动用双引号把整个单元格内容包裹起来 - 同时,为了让CSV阅读器能区分“包裹单元格的引号”和“内容里的引号”,会把内容里的每个双引号转义成两个双引号(这是CSV的标准转义方式)
所以你的情况就变成了:
- 单元格内容是
""(两个双引号),符合被包裹的条件 - 包裹时先加一对外层引号,然后把内容里的两个双引号各自转义成两个,最终就变成了
" + "" + "" + "→ 也就是六个双引号"""""" - 同理,如果你填充的是单个双引号
",最终就会变成" + "" + "→ 四个双引号""""
解决方法
根据你的需求(空单元格在CSV里显示为""),有两种常用方案,你可以根据自己的数据情况选择:
方案1:关闭自动引用(适合数据里没有分隔符的情况)
如果你的数据中所有单元格内容都不包含分隔符;,可以直接关闭Pandas的自动引用功能,这样它就不会额外添加引号或转义内容里的引号:
import pandas as pd import csv # 读取原始数据(示例) sheet01 = pd.read_csv("your_input.csv", sep=";") # 填充空值为两个双引号 quotes = '""' sheet01["column"] = sheet01["column"].fillna(quotes) # 修改导出参数,关闭自动引用 sheet01.to_csv("newCsv.csv", sep=";", index=False, header=False, quoting=csv.QUOTE_NONE)
这样导出的CSV里,填充过的空单元格就会直接显示为"",没有额外的引号。
方案2:全局引用所有单元格(适合数据里有分隔符的情况)
如果你的数据里有分隔符,关闭自动引用会导致CSV解析错误,这时候可以让所有单元格都被引号包裹——空值填充为空字符串后,被引号包裹就会变成"",正好符合你的需求:
import pandas as pd import csv # 读取原始数据(示例) sheet01 = pd.read_csv("your_input.csv", sep=";") # 空值填充为空字符串 sheet01["column"] = sheet01["column"].fillna("") # 导出时设置所有单元格都被引号包裹 sheet01.to_csv("newCsv.csv", sep=";", index=False, header=False, quoting=csv.QUOTE_ALL)
这种方式下,所有单元格内容都会被双引号括起来,空单元格自然就是"",同时分隔符也不会破坏CSV结构。
内容的提问来源于stack exchange,提问作者gref
相关产品推荐
相关产品推荐

