2016-11-20 39 views
2

我有包含例如數據幀:Python的大熊貓:在一個字符串中刪除一個分隔符之後的一切

"vendor a::ProductA" 
"vendor b::ProductA 
"vendor a::Productb" 

我需要讓我最終刪除一切(含)兩個:::

"vendor a" 
"vendor b" 
"vendor a" 

我試過str.trim(這似乎不存在)和str.split沒有成功。 什麼是最簡單的方法來完成這個?

+0

'str.split'可以做到 - 你是怎麼嘗試的? –

回答

6

您可以使用pandas.Series.str.split就像你會使用split正常。剛上線'::'和索引拆分是一個從split方法創建的列表:

>>> df = pd.DataFrame({'text': ["vendor a::ProductA", "vendor b::ProductA", "vendor a::Productb"]}) 
>>> df 
       text 
0 vendor a::ProductA 
1 vendor b::ProductA 
2 vendor a::Productb 
>>> df['text_new'] = df['text'].str.split('::').str[0] 
>>> df 
       text text_new 
0 vendor a::ProductA vendor a 
1 vendor b::ProductA vendor b 
2 vendor a::Productb vendor a 

這裏有一個非大熊貓的解決方案:

>>> df['text_new1'] = [x.split('::')[0] for x in df['text']] 
>>> df 
       text text_new text_new1 
0 vendor a::ProductA vendor a vendor a 
1 vendor b::ProductA vendor b vendor b 
2 vendor a::Productb vendor a vendor a 

編輯:下面是的一步一步的解釋正在發生的事情pandas以上:

# Select the pandas.Series object you want 
>>> df['text'] 
0 vendor a::ProductA 
1 vendor b::ProductA 
2 vendor a::Productb 
Name: text, dtype: object 

# using pandas.Series.str allows us to implement "normal" string methods 
# (like split) on a Series 
>>> df['text'].str 
<pandas.core.strings.StringMethods object at 0x110af4e48> 

# Now we can use the split method to split on our '::' string. You'll see that 
# a Series of lists is returned (just like what you'd see outside of pandas) 
>>> df['text'].str.split('::') 
0 [vendor a, ProductA] 
1 [vendor b, ProductA] 
2 [vendor a, Productb] 
Name: text, dtype: object 

# using the pandas.Series.str method, again, we will be able to index through 
# the lists returned in the previous step 
>>> df['text'].str.split('::').str 
<pandas.core.strings.StringMethods object at 0x110b254a8> 

# now we can grab the first item in each list above for our desired output 
>>> df['text'].str.split('::').str[0] 
0 vendor a 
1 vendor b 
2 vendor a 
Name: text, dtype: object 

我建議檢查出pandas.Series.str docs,或者更好的,Working with Text Data in pandas

+0

我之前嘗試過str.split('::'),但沒有成功。 .str [0]最後做了什麼? – f0rd42

+1

一秒。我會在上面展示。 – blacksite

1

您可以使用str.replace(「:」,「」)刪除「::」。 要分割,需要指定要分割的字符:str.split(「」) 修剪功能在python中稱爲strip:str.strip()

此外,您可以執行str [: 7]在你的字符串中獲得「供應商x」。

好運

+0

由於供應商名稱的長度不同,因此無法執行str [:7] – f0rd42

-2

有你的函數:

def do_it(str): 
    integer=0 
    while integer<len(str): 
     if str[integer]==':' : 
     if str[integer+1]==':' : 
      str=str.split(':')[0] 
      break; 
     integer=integer+1  
    return (str) 

傳遞原始字符串在那裏。並獲得新的修剪的字符串。

+0

是不是很複雜? – f0rd42

+1

對不起,你可以擺脫兩個if語句並在str.split()函數中傳遞'::'。 –

相關問題