首页 > 解决方案 > Pandas:错误可能是由于使用多字符分隔符时忽略引号引起的

问题描述

我想像这样使用 pandas 读取 file.txt:

option19971675181       ACHILLE BLA BLA BLA1                                 blabla    88   498
option19971675182       ACHILLE BLA BLA BLA  1                                  blabla   176   498
option19971675183       ACHILLE BLA BLA BLA1                                  blabla   191   498
option19971675184       ACHILLE BLA BLA BLA1                                  blabla   521   498
option19971675185       ACHILLE BLA BLA BLA1                                  blabla   919   498
option19971675186       ACHILLE BLA BLA BLA134234531                          blabla    10    498
option19971675187       ACHILLE BLA BLA BLA134234531 7 65                     blabla     0     0
option19971675188       ACHILLE BLA BLA BLA1342 90345 31                      blabla     0     0
option19971675189      ACHILLE BLA BLA BLA 134 23N 094 87OP531                blabla     0     0
option19971675190       ACHILLE BLA BLA BLA 134 23N 094 87  OP53                blabla     0     0

列值由多个空格分隔,因此我编写了以下代码:

df = pd.read_csv("test.txt", delimiter ="\s\s+", header = None)

这里的问题是我在 exp 的文本(ACHILLE BLA BLA BLA 1 )中有一些额外的空格:

option19971675190       ACHILLE BLA BLA BLA 134 23N 094 87  OP53                blabla     0     0
option19971675182       ACHILLE BLA BLA BLA  1                                  blabla   176   498

这个额外的空格导致和错误:pandas.errors.ParserError: Expected 5 fields in line, saw 6. Error could possibly be due to quotes being ignored when a multi-char delimiter is used.

有什么解决办法吗?

标签: pythonpandas

解决方案


我们可以通过将分隔符设置为“3 个或更多空格”来解决此问题:

df = pd.read_csv(text, sep="\s{3,}", header=None)
print(df)
                   0                                         1       2    3    4
0  option19971675181                      ACHILLE BLA BLA BLA1  blabla   88  498
1  option19971675182                    ACHILLE BLA BLA BLA  1  blabla  176  498
2  option19971675183                      ACHILLE BLA BLA BLA1  blabla  191  498
3  option19971675184                      ACHILLE BLA BLA BLA1  blabla  521  498
4  option19971675185                      ACHILLE BLA BLA BLA1  blabla  919  498
5  option19971675186              ACHILLE BLA BLA BLA134234531  blabla   10  498
6  option19971675187         ACHILLE BLA BLA BLA134234531 7 65  blabla    0    0
7  option19971675188          ACHILLE BLA BLA BLA1342 90345 31  blabla    0    0
8  option19971675189   ACHILLE BLA BLA BLA 134 23N 094 87OP531  blabla    0    0
9  option19971675190  ACHILLE BLA BLA BLA 134 23N 094 87  OP53  blabla    0    0

注意:尽管此解决方案有效,但您的文件格式看起来更像是固定宽度格式,因此您应该使用pd.read_fwf

df = pd.read_fwf(text, colspecs="infer", header=None)
print(df)
                   0                                         1       2          3
0  option19971675181                      ACHILLE BLA BLA BLA1  blabla   88   498
1  option19971675182                    ACHILLE BLA BLA BLA  1  blabla  176   498
2  option19971675183                      ACHILLE BLA BLA BLA1  blabla  191   498
3  option19971675184                      ACHILLE BLA BLA BLA1  blabla  521   498
4  option19971675185                      ACHILLE BLA BLA BLA1  blabla  919   498
5  option19971675186              ACHILLE BLA BLA BLA134234531  blabla  10    498
6  option19971675187         ACHILLE BLA BLA BLA134234531 7 65  blabla    0     0
7  option19971675188          ACHILLE BLA BLA BLA1342 90345 31  blabla    0     0
8  option19971675189   ACHILLE BLA BLA BLA 134 23N 094 87OP531  blabla    0     0
9  option19971675190  ACHILLE BLA BLA BLA 134 23N 094 87  OP53  blabla    0     0

推荐阅读