#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)