我有一个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.
任何人都知道我应该做什么?
答案 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