Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Pandas中带重复分隔符的字符串提取_Python_Regex_Python 3.x_Pandas - Fatal编程技术网

Python/Pandas中带重复分隔符的字符串提取

Python/Pandas中带重复分隔符的字符串提取,python,regex,python-3.x,pandas,Python,Regex,Python 3.x,Pandas,我有一个数据框,其中包含一个或多个变量的任意组合,由“/”分隔符分隔,例如: Rd/MLERS Rd Rd Rd/DLEPC/DLERS SLERS MLERS 等等,等等。我想提取主分类器,即:第一个“/”字符前面的唯一变量或第一个变量。我对str.extract没有太多经验,我的努力- df["primaryEjecta1"] = df["MORPHOLOGY_EJECTA_1"].str.extract('(.*)/', expand=True) 不按预期工作- R

我有一个数据框,其中包含一个或多个变量的任意组合,由“/”分隔符分隔,例如:

Rd/MLERS
Rd
Rd          
Rd/DLEPC/DLERS
SLERS
MLERS
等等,等等。我想提取主分类器,即:第一个“/”字符前面的唯一变量或第一个变量。我对str.extract没有太多经验,我的努力-

df["primaryEjecta1"] = df["MORPHOLOGY_EJECTA_1"].str.extract('(.*)/', expand=True)
不按预期工作-

Rd
NaN
NaN
Rd/DLEPC
NaN
NaN
具体而言—

  • 在只有一个变量的情况下,我无意中将其转换为NaN
  • 在有三个(或更多)变量的地方,我提取前两个(或更多),而不仅仅是第一个

如果你知道如何解决这个问题,请确保这个问题很简单-但我在网上找到的大多数示例和教程都使用了漂亮、整洁的分隔符,不会重复-因此感谢你们提供的任何帮助。

使用
str.split
str[0]
访问第一个分割,即使没有分隔符,这仍将返回初始字符串:

In [121]:
df["primaryEjecta1"] = df['text'].str.split('/').str[0]
df

Out[121]:
             text primaryEjecta1
0        Rd/MLERS             Rd
1              Rd             Rd
2              Rd             Rd
3  Rd/DLEPC/DLERS             Rd
4           SLERS          SLERS
5           MLERS          MLERS
您可以使用强大的方法:

说明:


RegEx
([^\/]+)
-表示将除
/
(并且直到第一次出现
/
)之外的任何东西放入第一个组中

也可以指定
maxslit
,因为他只需要第一部分:
split('/',1)
In [31]: df
Out[31]:
              txt
0        Rd/MLERS
1              Rd
2              Rd
3  Rd/DLEPC/DLERS
4           SLERS
5           MLERS

In [32]: df['clsfr'] = df['txt'].str.extract(r'([^\/]+)', expand=True)

In [33]: df
Out[33]:
              txt  clsfr
0        Rd/MLERS     Rd
1              Rd     Rd
2              Rd     Rd
3  Rd/DLEPC/DLERS     Rd
4           SLERS  SLERS
5           MLERS  MLERS