使用Pandas读取CSV时如何去除字段中的引号?
Pandas读取CSV时如何去除字段中的引号?
嘿,我太懂你遇到的这个糟心问题了——这种全字段带双引号、分隔符还是逗号加空格的CSV,默认的read_csv参数根本摸不清套路,才导致引号硬生生留在了列名和值里。我给你说个一步到位的解决办法,完全不用事后遍历去删引号!
先拆解下问题根源:你的CSV里字段之间是用**, (逗号加空格)**分隔的,但Pandas默认只认单纯的逗号当成分隔符。这样一来,它读到"Version", "Date"的时候,会把"Version"当成第一个列名,然后把 "Date"(带前置空格和引号)当成第二个列名,引号自然就被当成内容保留下来了。
只要调整几个read_csv的参数,就能让Pandas完美识别这种格式:
import pandas as pd import csv df = pd.read_csv( 'myfile.csv', sep=', ', # 明确指定分隔符是逗号加空格 quotechar='"', # 告诉Pandas双引号是字段的包裹符号,不是内容的一部分 escapechar='\\', # 识别反斜杠为转义符,正确解析像"A\, C"这种带转义逗号的字段 quoting=csv.QUOTE_ALL # 声明所有字段都被双引号包裹 )
用这段代码读取后,你再看DataFrame的内容:列名会变成干净的Version、Date、Code,所有值的引号会被自动剥离,就连那个带转义的"A\, C"也会被正确解析成A, C,完全符合预期!
至于你之前用quoting=csv.QUOTE_NONE反而更糟的原因:这个参数会让Pandas彻底忽略引号的特殊作用,把所有引号都当成普通文本,自然就给原本没引号的列也硬加上了引号,完全搞反了方向。
以后遇到类似的CSV格式问题,先盯紧分隔符、包裹符、转义符这三个关键点,调整对应参数就行,比事后遍历删引号高效太多啦。
备注:内容来源于stack exchange,提问作者jeremywat
相关产品推荐
相关产品推荐

