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



考虑一个文件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 narray或pandas dataframe结束。

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

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

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

在我看来,默认情况下read_csv应该适用于我的情况——然而它没有。

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

刚刚找到这个:

我缺少的关键参数是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

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)

相关内容

  • 没有找到相关文章

最新更新