2016-07-27 28 views
2

我有包括一個或多個變量的任何組合的列,由「/」分隔符分隔的數據幀,例如:串提取與重複定界符

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;
  • 如果有三個(或更多)變量,我將提取前兩個(或更多),而不是僅提取第一個。

當然這個簡單,如果你知道如何解決 - 但大部分我已經能夠找到上線假設不重複漂亮,整潔的分隔符的例子和教程 - 所以感謝所有幫助,你們可以提供。

回答

1

您可以使用功能強大的extract()方法:

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 

說明:

RegEx ([^\/]+) - 表示除了/(和直到第一次出現/)到第一組

2

使用str.splitstr[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 
+1

也可以指定'maxsplit',因爲他只需要第一部分:'split('/',1)' – Eswcvlad

+0

是的,這是真的 – EdChum