Python pandas: удалить все после разделителя в строке

у меня есть фреймы данных, которые содержат, например:

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

мне нужно удалить все (и в том числе) два :: так что я в конечном итоге с:

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

я попробовал str.trim (которого, кажется, не существует) и str.раскол без успеха. как проще всего этого добиться?

3 ответов


можно использовать 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

Edit: вот пошаговое объяснение того, что происходит в 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

Я бы предложил проверить панды.Серии.str docs, или, еще лучше, работа с текстовыми данными в панды!--16-->.


вы можете использовать str.заменить ( " :","") на"::". Чтобы разделить, нужно указать символ, который вы хотите разделить на : ул.расщеплять(" ") Функция trim называется strip в python: str.strip ()

кроме того, вы можете сделать str[:7], чтобы получить только "поставщик x" в ваших строках.

удачи


существует ваша функция:

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)

передайте туда исходную строку. И получить новую обрезанную строку.