numpy genfromtxt/pandas read_csv;忽略引号内的逗号

Posted

技术标签:

【中文标题】numpy genfromtxt/pandas read_csv;忽略引号内的逗号【英文标题】:numpy genfromtxt/pandas read_csv; ignore commas within quote marks 【发布时间】:2014-07-27 13:47:38 【问题描述】:

考虑一个文件a.dat,其内容:

address 1, address 2, address 3, num1, num2, num3
address 1, address 2, address 3, 1.0, 2.0, 3
address 1, address 2, "address 3, address4", 1.0, 2.0, 3

我正在尝试使用numpy.genfromtxt 导入。但是,该函数在第 3 行中看到了一个附加列。pandas.read_csv 出现类似的错误:

np.genfromtxt('a.dat',delimiter=',',dtype=None,skiprows=1)

ValueError: Some errors were detected !
    Line #3 (got 7 columns instead of 6)

pandas read_csv sort of works - but it gives me an unaligned data structure:

pd.read_csv('a.dat')

pandas.parser.CParserError: Error tokenizing data. C error: Expected 6 fields in line 3, saw 7

我正在尝试找到一个输入参数来弥补这一点。我不介意最终得到一个 numpy ndarray 或 pandas 数据框。

我可以在genfromtxt 和/或read_csv 中设置一个参数,让我忽略语音标记中的逗号吗?

我注意到read_csv 包含一个quotechar='"' 参数,定义如下:

quotechar : string (length 1) 用来表示开始的字符 和引用项目的结尾。引用的项目可以包括分隔符和 它将被忽略。

这对我来说就像 read_csv 默认情况下应该适用于我的情况 - 但它没有。

我可以看到我可以预处理文件以去除逗号 - 如果可能的话,我想避免这种情况,但如果这是唯一的方法,我会欢迎提出建议。

【问题讨论】:

为什么quotechar 不起作用?有人吗? 【参考方案1】:

Python 内置的csv 模块可以处理这种数据。

with open("a.dat") as f:
    reader = csv.reader(f, skipinitialspace=True)
    header = next(reader)
    dtype = numpy.dtype(zip(header, ['S20', 'S20', 'S20', 'f8', 'f8', 'f8']))
    data = numpy.fromiter(itertools.imap(tuple, reader), dtype=dtype)

【讨论】:

【参考方案2】:

刚刚找到this:

我缺少的关键参数是skipinitialspace=True - 这“处理逗号分隔符后的空格”

a=pd.read_csv('a.dat',quotechar='"',skipinitialspace=True)

   address 1  address 2            address 3  num1  num2  num3
0  address 1  address 2            address 3     1     2     3
1  address 1  address 2  address 3, address4     1     2     3

这行得通:-)

【讨论】:

以上是关于numpy genfromtxt/pandas read_csv;忽略引号内的逗号的主要内容,如果未能解决你的问题,请参考以下文章

如何将围绕 C++ 函数的 R 包装器转换为 Python/Numpy

浮点数的乘法在 Numpy 和 R 中给出不同的结果

如何使用 Python 和 Numpy 计算 r 平方?

关于meshgrid和numpy.c_以及numpy.r_

使用 numpy 和 sklearn 计算 R^2(确定系数)给出不同的结果

在 Python、NumPy 和 R 中创建相同的随机数序列