Удаление определенной строки в столбце Python Pandas - PullRequest
0 голосов
/ 18 октября 2018

У меня есть фрейм данных с пол столбца.Он состоит из предсказаний пола.Теперь у гендерного столбца есть такие значения, как преимущественно_male, преимущественно_female.Я хочу удалить в основном.Поэтому я попытался df['gender'] = df['gender'].map(lambda x: x.lstrip('mostly_'))

Но я получил столбец со значениями 'мужской', соответствующих 'элю'

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Вы можете использовать replace для удаления нежелательной строки.lstrip удалит все символы, соответствующие критериям.Подробнее lstrip docs Также можно использовать библиотеку регулярных выражений для замены подстроки

import re
df['gender'].map(lambda x: re.sub('^mostly_','',x))
0 голосов
/ 18 октября 2018

pandas.DataFrame.replace

Вы можете передать словарь этому методу, чтобы указать, с каким столбцом работать

df.replace({'gender': {'mostly_': ''}}, regex=True)

pandas.Series.str.replace

Преимуществочто вам не нужно указывать regex=True

df.gender.str.replace('mostly_', '')

pandas.Series.str

Проголосовал "Mostly_likely" на разрыв.Но если вы знаете, что все записи начинаются с "mostly_", то почему бы не

df.gender.str[7:]

pandas.Series.map

Мне не нравятся другие опции, потому что все они связаны со строковыми манипуляциями,Вы можете быть более точным с отображением словаря и вести постоянный поиск

df.gender.map({'mostly_male': 'male', 'mostly_female': 'female'})

Время

Настройка

df = pd.DataFrame(dict(gender=[f"mostly_{g}" for g in ['male', 'female'] * 10000]))

Тест

%timeit df.replace({'gender': {'mostly_': ''}}, regex=True)
%timeit df.gender.str.replace('mostly_', '')
%timeit df.gender.str[7:]
%timeit df.gender.map({'mostly_male': 'male', 'mostly_female': 'female'})

100 loops, best of 3: 12.8 ms per loop
100 loops, best of 3: 16.1 ms per loop
100 loops, best of 3: 5.42 ms per loop
1000 loops, best of 3: 1.8 ms per loop
0 голосов
/ 18 октября 2018

Вы должны использовать replace:

 df['gender'] = df['gender'].str.replace('mostly_', '')

Это заменит любые точные совпадения "главным образом_" на пустое "".Ваш пример удалит начальные символы из строки, если какой-либо из них будет найден в строке, которую вы передаете.Таким образом, «m» находится в lstrip, и «главным образом» удаляется, но поскольку в «мужском» есть «м», оно также будет удалено.

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