Как удалить все строковые значения, предшествующие символу в pandas? - PullRequest
1 голос
/ 07 августа 2020

У меня есть следующий фрейм данных:

data = {'Name':['Square_Train_1', 'Stims1/Neut/32Neut1.jpg', 'Square_Train_2',
       'Stims1/Neg/114Neg1.jpg', 'Square_Train_3',
       'Stims1/Pos/129Pos1.jpg', 'Stims1/Neut/58Neut1.jpg',
       'Stims1/Neg/13Neg1.jpg', 'Stims1/Pos/5Pos1.jpg',
       'Stims1/Pos/25Pos1.jpg', 'Stims1/Neg/47Neg1.jpg',
       'Stims1/Neut/8Neut1.jpg', 'Stims1/Neg/129Neg1.jpg',
       'Stims1/Neut/42Neut1.jpg', 'Stims1/Pos/98Pos1.jpg',
       'Stims1/Neut/24Neut1.jpg', 'Stims1/Neg/6Neg1.jpg',
       'Stims1/Pos/107Pos1.jpg', 'Stims1/Neg/100Neg1.jpg',
       'Stims1/Pos/77Pos1.jpg', 'Stims1/Neut/3Neut1.jpg',
       'Stims1/Neg/53Neg1.jpg', 'Stims1/Pos/157Pos1.jpg',
       'Stims1/Neut/13Neut1.jpg', 'Stims1/Neut/9Neut1.jpg',
       'Stims1/Pos/104Pos1.jpg', 'Stims1/Neg/64Neg1.jpg',
       'Stims1/Neut/30Neut1.jpg', 'Stims1/Pos/43Pos1.jpg',
       'Stims1/Neg/1Neg1.jpg', 'Stims1/Neut/59Neut1.jpg',
       'Stims1/Neg/172Neg1.jpg', 'Stims1/Pos/56Pos1.jpg',
       'Stims1/Pos/44Pos1.jpg', 'Stims1/Neg/34Neg1.jpg',
       'Stims1/Neut/16Neut1.jpg', 'Stims1/Neut/47Neut1.jpg',
       'Stims1/Neg/21Neg1.jpg', 'Stims1/Pos/96Pos1.jpg',
       'Stims1/Neg/50Neg1.jpg', 'Stims1/Pos/2Pos1.jpg',
       'Stims1/Neut/21Neut1.jpg', 'Stims1/Neg/65Neg1.jpg',
       'Stims1/Pos/35Pos1.jpg', 'Stims1/Neut/51Neut1.jpg',
       'Stims1/Neut/55Neut1.jpg', 'Stims1/Pos/60Pos1.jpg',
       'Stims1/Neg/30Neg1.jpg', 'Stims1/Neut/7Neut1.jpg',
       'Stims1/Pos/9Pos1.jpg', 'Stims1/Neg/41Neg1.jpg',
       'Stims1/Pos/31Pos1.jpg', 'Stims1/Neut/40Neut1.jpg',
       'Stims1/Neg/156Neg1.jpg', 'Stims1/Neg/135Neg1.jpg',
       'Stims1/Pos/71Pos1.jpg', 'Stims1/Neut/26Neut1.jpg',
       'Stims1/Pos/105Pos1.jpg', 'Stims1/Neg/17Neg1.jpg',
       'Stims1/Neut/44Neut1.jpg', 'Stims1/Pos/150Pos1.jpg',
       'Stims1/Neut/57Neut1.jpg', 'Stims1/Neg/12Neg1.jpg',
       'Stims1/Pos/24Pos1.jpg', 'Stims1/Neg/131Neg1.jpg',
       'Stims1/Neut/31Neut1.jpg', 'Stims1/Pos/10Pos1.jpg',
       'Stims1/Neut/11Neut1.jpg', 'Stims1/Neg/118Neg1.jpg',
       'Stims1/Neg/51Neg1.jpg', 'Stims1/Pos/48Pos1.jpg',
       'Stims1/Neut/34Neut1.jpg', 'Stims1/Pos/148Pos1.jpg',
       'Stims1/Neut/22Neut1.jpg', 'Stims1/Neg/176Neg1.jpg',
       'Stims1/Neut/5Neut1.jpg', 'Stims1/Neg/104Neg1.jpg',
       'Stims1/Pos/68Pos1.jpg', 'Stims1/Neut/35Neut1.jpg',
       'Stims1/Pos/14Pos1.jpg', 'Stims1/Neg/136Neg1.jpg',
       'Stims1/Neut/54Neut1.jpg', 'Stims1/Neg/107Neg1.jpg',
       'Stims1/Pos/47Pos1.jpg', 'Stims1/Neut/43Neut1.jpg',
       'Stims1/Neg/58Neg1.jpg', 'Stims1/Pos/20Pos1.jpg',
       'Stims1/Neut/6Neut1.jpg', 'Stims1/Neg/63Neg1.jpg',
       'Stims1/Pos/135Pos1.jpg', 'Stims1/Neut/39Neut1.jpg',
       'Stims1/Neg/164Neg1.jpg', 'Stims1/Pos/125Pos1.jpg',
       'Stims1/Neg/117Neg1.jpg', 'Stims1/Neut/48Neut1.jpg',
       'Stims1/Pos/69Pos1.jpg', 'Stims1/Pos/37Pos1.jpg',
       'Stims1/Neg/159Neg1.jpg', 'Stims1/Neut/36Neut1.jpg',
       'Stims1/Pos/75Pos1.jpg', 'Stims1/Neg/180Neg1.jpg',
       'Stims1/Neut/50Neut1.jpg', 'Stims1/Neg/7Neg1.jpg',
       'Stims1/Pos/11Pos1.jpg', 'Stims1/Neut/52Neut1.jpg',
       'Stims1/Pos/29Pos1.jpg', 'Stims1/Neut/46Neut1.jpg',
       'Stims1/Neg/115Neg1.jpg', 'Stims1/Neg/31Neg1.jpg',
       'Stims1/Pos/66Pos1.jpg', 'Stims1/Neut/14Neut1.jpg',
       'Stims1/Neut/53Neut1.jpg', 'Stims1/Neg/162Neg1.jpg',
       'Stims1/Pos/97Pos1.jpg', 'Stims1/Neg/35Neg1.jpg',
       'Stims1/Neut/45Neut1.jpg', 'Stims1/Pos/32Pos1.jpg',
       'Stims1/Pos/81Pos1.jpg', 'Stims1/Neg/24Neg1.jpg',
       'Stims1/Neut/1Neut1.jpg', 'Stims1/Neut/20Neut1.jpg',
       'Stims1/Neg/69Neg1.jpg', 'Stims1/Pos/52Pos1.jpg',
       'Stims2/Pos/35Pos2.jpg', 'Stims2/Neut/1Neut2.jpg',
       'Stims2/Neg/30Neg2.jpg', 'Stims2/Neg/156Neg2.jpg',
       'Stims2/Neut/59Neut2.jpg', 'Stims2/Pos/150Pos2.jpg',
       'Stims2/Neg/114Neg2.jpg', 'Stims2/Neut/39Neut2.jpg',
       'Stims2/Pos/98Pos2.jpg', 'Stims2/Pos/14Pos2.jpg',
       'Stims2/Neg/24Neg2.jpg', 'Stims2/Neut/51Neut2.jpg',
       'Stims2/Pos/48Pos2.jpg', 'Stims2/Neg/31Neg2.jpg',
       'Stims2/Neut/26Neut2.jpg', 'Stims2/Neg/35Neg2.jpg',
       'Stims2/Neut/40Neut2.jpg', 'Stims2/Pos/60Pos2.jpg',
       'Stims2/Pos/77Pos2.jpg', 'Stims2/Neut/9Neut2.jpg',
       'Stims2/Neg/47Neg2.jpg', 'Stims2/Neg/107Neg2.jpg',
       'Stims2/Pos/66Pos2.jpg', 'Stims2/Neut/55Neut2.jpg',
       'Stims2/Neut/14Neut2.jpg', 'Stims2/Pos/56Pos2.jpg',
       'Stims2/Neg/34Neg2.jpg', 'Stims2/Neg/131Neg2.jpg',
       'Stims2/Pos/97Pos2.jpg', 'Stims2/Neut/52Neut2.jpg',
       'Stims2/Neut/45Neut2.jpg', 'Stims2/Neg/162Neg2.jpg',
       'Stims2/Pos/129Pos2.jpg', 'Stims2/Pos/52Pos2.jpg',
       'Stims2/Neg/104Neg2.jpg', 'Stims2/Neut/48Neut2.jpg',
       'Stims2/Neut/21Neut2.jpg', 'Stims2/Pos/104Pos2.jpg',
       'Stims2/Neg/50Neg2.jpg', 'Stims2/Pos/24Pos2.jpg',
       'Stims2/Neut/34Neut2.jpg', 'Stims2/Neg/176Neg2.jpg',
       'Stims2/Neg/129Neg2.jpg', 'Stims2/Pos/47Pos2.jpg',
       'Stims2/Neut/36Neut2.jpg', 'Stims2/Pos/157Pos2.jpg',
       'Stims2/Neg/58Neg2.jpg', 'Stims2/Neut/7Neut2.jpg',
       'Stims2/Neut/53Neut2.jpg', 'Stims2/Pos/69Pos2.jpg',
       'Stims2/Neg/172Neg2.jpg', 'Stims2/Pos/68Pos2.jpg',
       'Stims2/Neut/35Neut2.jpg', 'Stims2/Neg/100Neg2.jpg',
       'Stims2/Neg/17Neg2.jpg', 'Stims2/Pos/148Pos2.jpg',
       'Stims2/Neut/46Neut2.jpg', 'Stims2/Neut/16Neut2.jpg',
       'Stims2/Pos/105Pos2.jpg', 'Stims2/Neg/159Neg2.jpg',
       'Stims2/Pos/29Pos2.jpg', 'Stims2/Neg/64Neg2.jpg',
       'Stims2/Neut/58Neut2.jpg', 'Stims2/Neut/30Neut2.jpg',
       'Stims2/Pos/71Pos2.jpg', 'Stims2/Neg/41Neg2.jpg',
       'Stims2/Neut/20Neut2.jpg', 'Stims2/Neg/69Neg2.jpg',
       'Stims2/Pos/9Pos2.jpg', 'Stims2/Pos/5Pos2.jpg',
       'Stims2/Neut/13Neut2.jpg', 'Stims2/Neg/1Neg2.jpg',
       'Stims2/Pos/31Pos2.jpg', 'Stims2/Neg/21Neg2.jpg',
       'Stims2/Neut/32Neut2.jpg', 'Stims2/Pos/96Pos2.jpg',
       'Stims2/Neg/118Neg2.jpg', 'Stims2/Neut/57Neut2.jpg',
       'Stims2/Neut/3Neut2.jpg', 'Stims2/Pos/32Pos2.jpg',
       'Stims2/Neg/117Neg2.jpg', 'Stims2/Neg/6Neg2.jpg',
       'Stims2/Pos/10Pos2.jpg', 'Stims2/Neut/44Neut2.jpg',
       'Stims2/Pos/25Pos2.jpg', 'Stims2/Neut/50Neut2.jpg',
       'Stims2/Neg/51Neg2.jpg', 'Stims2/Neut/47Neut2.jpg',
       'Stims2/Neg/135Neg2.jpg', 'Stims2/Pos/125Pos2.jpg',
       'Stims2/Neut/43Neut2.jpg', 'Stims2/Neg/7Neg2.jpg',
       'Stims2/Pos/11Pos2.jpg', 'Stims2/Neut/22Neut2.jpg',
       'Stims2/Pos/20Pos2.jpg', 'Stims2/Neg/180Neg2.jpg',
       'Stims2/Neut/31Neut2.jpg', 'Stims2/Neg/164Neg2.jpg',
       'Stims2/Pos/37Pos2.jpg', 'Stims2/Neg/13Neg2.jpg',
       'Stims2/Neut/5Neut2.jpg', 'Stims2/Pos/135Pos2.jpg',
       'Stims2/Neg/53Neg2.jpg', 'Stims2/Neut/54Neut2.jpg',
       'Stims2/Pos/81Pos2.jpg', 'Stims2/Pos/44Pos2.jpg',
       'Stims2/Neut/11Neut2.jpg', 'Stims2/Neg/115Neg2.jpg',
       'Stims2/Neut/6Neut2.jpg', 'Stims2/Pos/107Pos2.jpg',
       'Stims2/Neg/136Neg2.jpg', 'Stims2/Pos/75Pos2.jpg',
       'Stims2/Neg/65Neg2.jpg', 'Stims2/Neut/42Neut2.jpg',
       'Stims2/Pos/43Pos2.jpg', 'Stims2/Neut/24Neut2.jpg',
       'Stims2/Neg/12Neg2.jpg', 'Stims2/Neut/8Neut2.jpg',
       'Stims2/Pos/2Pos2.jpg', 'Stims2/Neg/63Neg2.jpg']} 
  
# Create DataFrame 
df = pd.DataFrame(data) 
  
# Print the output. 
df 

Цель состоит в том, чтобы удалить все символы, предшествующие символу '/'.

Я пробовал 'lstrip':

df['Name'] = df['Name'].map(lambda x: x.lstrip('Stims1/Neut/'))
df['Name'] = df['Name'].map(lambda x: x.lstrip('Stims1/Pos/'))
df['Name'] = df['Name'].map(lambda x: x.lstrip('Pos/'))
df['Name'] = df['Name'].map(lambda x: x.lstrip('2'))
df['Name'] = df['Name'].map(lambda x: x.lstrip('/Pos/'))
df['Name'] = df['Name'].map(lambda x: x.lstrip('Neg/'))
df['Name'] = df['Name'].map(lambda x: x.lstrip('/Neut/'))
df['Name'] = df['Name'].map(lambda x: x.lstrip('ut/'))

Проблема с lstrip в том, что он требует много разных входов для сопоставления строки и часто удаляет слишком много строк.

Я бы не хотел использовать 'replace', так как он еще меньше эффективный; это требует ввода каждой отдельной комбинации строк. Та же проблема, по-видимому, относится и к 're'.

Есть ли способ наиболее эффективно удалить все символы, предшествующие '/'?

1 Ответ

3 голосов
/ 07 августа 2020

На самом деле похоже, что вы пытаетесь сделать, это захватить только имя файла и удалить остальную часть каталога из пути к файлу. Если это так, я бы использовал df.apply с os.path.basename

>>> import os
>>> df['Name'] = df['Name'].apply(os.path.basename)

, что приводит к

>>> df
               Name
0    Square_Train_1
1       32Neut1.jpg
2    Square_Train_2
3       114Neg1.jpg
4    Square_Train_3
..              ...
238     24Neut2.jpg
239      12Neg2.jpg
240      8Neut2.jpg
241       2Pos2.jpg
242      63Neg2.jpg

[243 rows x 1 columns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...