pandas系列extractall错误

时间:2017-03-08 22:33:14

标签: python pandas

我有一个pandas系列(名为df),格式如下:

                     col1
  a               GEOS 13100
  b               MATH 13100-MATH 13200
  c               MATH 19100-19200
  d               SPAN 10300 or 20300
  e               EGPT 10101-10102-10103
  f               MOGK 10100/30100
  g               PHSC 12600 must be taken before PHSC 12620

我想从col1中提取所有课程(" [A-Z] {4} \ s * \ d {5}"或" \ d {5}")。所需的数据集将采用以下格式:

          col1        col2          col3          col4        col5
a      GEOS 13100
b      MATH 13100      -          MATH 13200
c      MATH 19100      -          19200
d      SPAN 10300      or         20300
e      EGPT 10101      -          10102            -          10103
f      MOGK 10100      /          30100
g      PHSC 12600                 PHSC 12620

我试过

df.col1.str.extract('(([A-Z]{4}\s*\d{5}?)|(\d{5}?)).*?(and|\-|or|\, or|\:|\/|\.|\;|\(|\s?)')

并获得了第一个匹配的模式。

我试过

df.col1.str.extractall('(([A-Z]{4}\s*\d{5}?)|(\d{5}?)).*?(and|\-|or|\, or|\:|\/|\.|\;|\(|\s?)')

但出现以下错误:

Length of names must match number of levels in MultiIndex.

任何人都知道我应该做什么?

2 个答案:

答案 0 :(得分:0)

如果您使用的是较旧版本的pandas,则可能会遇到类似this issue的内容(尽管您的索引似乎不是有问题的形式)。在版本0.19.0中,两个案例都运行没有错误:

tf.nn.dropout

答案 1 :(得分:0)

试试这个:

In [172]: df.col1.str.extractall(r'(\w{4}\s\d{4,}|\d{4,}|[\-/]|or)').unstack().fillna('')
Out[172]:
                0
match           0   1           2  3      4
a      GEOS 13100
b      MATH 13100   -  MATH 13200
c      MATH 19100   -       19200
d      SPAN 10300  or       20300
e      EGPT 10101   -       10102  -  10103
f      MOGK 10100   /       30100
g      PHSC 12600  or  PHSC 12620