Проверьте, содержит ли ячейка фрейма данных Panda символ

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных с 5666 строками. Мне нужно проверить, содержит ли она символ # , и если да, выньте символ, который я добавил к нему, _ . Прямо сейчас я добавляю столбец note_features['chord_label'] = note_features['bass'] '_' 'M' .

У меня есть строка, которая будет равна F_M , и это нормально, но у меня есть другая строка, которая равна F#_M . Я хочу удалить, _ чтобы оно было равно F#M . Как я могу это сделать?

Спасибо

Комментарии:

1. » всегда появляется сразу после ‘#’ ? И если да, вы хотите удалить только это » или все «_» в ячейке (на случай, если их больше одного)?

Ответ №1:

 df = pd.DataFrame({"Column":["F#_M","F_M"]})
output
    Column
0   F#_M
1   F_M

df.Column.apply(lambda x: x.replace("#","") if "#" in x else x)
# output
0    F_M
1    F_M
Name: Column

OR 

df.Column.apply(lambda x: x.replace("_","") if "#" in x else x)
# output
0    F#M
1    F_M
Name: Column
 

Помогает ли это вам добиться преобразования ur?

Что apply делает, так это применяет к каждой строке определенную функцию. Наша функция lambda — это то, что replace character мы выбираем с помощью something else . В нашем случае это была строка _ by an empty . x.replace("#","") if # in x <=> если строка содержит a # , замените ее на empty . ELSE оставьте x как есть.

Ответ №2:

Будет работать следующее (даже если в строке есть другие вхождения ‘#», однако он будет учитывать только первое вхождение ‘#_’, если их несколько):

 note_features['chord_label']=note_features['chord_label'].apply(lambda x: x[:x.index('#_') 1] x[x.index('#') 2:] if '#_' in x else x)