csv中带双引号的Pandas解释问题

问题描述 投票:0回答:2

我有一个 csv 文件,其值以逗号分隔。 纯文本的列值之一输入为

"XATO,2xASSY,SSD, 6.4TB Gen2, SFF-2.5"", N"

应该放在双引号内,这样值内的逗号就不会被误认为分隔符。

当我执行

pd.read_csv
然后打印这个值时,我得到了

XATO,2xASSY,SSD, 6.4TB Gen2, SFF-2.5"

结果。这正是我需要的,但我似乎无法理解解释逻辑,有人可以解释一下吗?

python pandas csv double-quotes
2个回答
2
投票

Pandas 正在寻找双引号字符"之间的

最长
引用区域。

也就是说,当 Pandas 遇到作为字段开头候选的

"
时,它会向右搜索匹配的
"
来关闭该字段。然而,当它第一次遇到第二个
"
时,它不会立即关闭场。相反,它会搜索 "
outermost
实例,后跟空格和另一个字段分隔符
,
,或行尾。

请注意,此行为也会受到

doublequote=
kwarg(默认为
True
)和
quoting=
kwarg(默认为
csv.QUOTE_MINIMAL
)的影响。

使用

doublequote=False
quoting=csv.QUOTE_MINIMAL
,输入
"XATO,2xASSY,SSD, 6.4TB Gen2, SFF-2.5""""""", N"
产生输出
XATO,2xASSY,SSD, 6.4TB Gen2, SFF-2.5""""""
N"
。除了最右边的所有
"
都被视为字段内容的一部分。

相比之下,

"XATO,2xASSY,SSD, 6.4TB Gen2, SFF-2.5"","""""", N"
解析为列,
XATO,2xASSY,SSD, 6.4TB Gen2, SFF-2.5"
"""
 N"

表示为正则表达式,其行为在概念上类似于

"(.*?)"(?:,|$)
,其中字段内容本身是第一个捕获组。到底是通过回溯还是其他方式来实现的,我不知道。您必须检查源代码。当然,实际行为比您想要尝试用普通正则表达式表达的行为要复杂得多。


0
投票

使用

csv.QUOTENONE

import csv
import pandas as pd

df = pd.read_csv('mycsv.csv', quoting=csv.QUOTE_NONE)

或者只使用号码

3
:

import pandas as pd

df = pd.read_csv('mycsv.csv', quoting=3)

推理:

正如 Pandas 文档 here 中提到的,

pd.read_csv
,
(逗号)作为默认分隔符,因此
pd.read_csv
函数正在 csv 文件的行中查找逗号,一旦函数找到逗号,它向该行添加一个新元素。

© www.soinside.com 2019 - 2024. All rights reserved.