Используя отрицание с пандами заменить - PullRequest
0 голосов
/ 11 апреля 2019

Я заинтересован в использовании pandas dataframe.replace (), но с отрицанием. Я не вижу ничего в документации, которая поддерживает это, так есть ли лучший способ сделать это?

пример кадра данных

Color     Shape
blue      star
red       triangle
purple    square

код для замены всех экземпляров, которые не начинаются с трапеции

dataframe['Shape'] = dataframe['Shape'].replace(~['star'], 'trapezoid')

ожидаемый фрейм данных

Color     Shape
blue      star
red       trapezoid
purple    trapezoid

Ответы [ 3 ]

2 голосов
/ 11 апреля 2019

одно из возможных решений:

dataframe.loc[~dataframe['Shape'].str.contains(['star']),'Shape']= 'trapezoid'

, если вы хотите улучшить производительность кода, вы можете использовать:

dataframe.loc[~dataframe['Shape']=='star','Shape']= 'trapezoid'
2 голосов
/ 11 апреля 2019

Использование regex с negative lookahead будет выглядеть так:

df['Shape'] = df.Shape.str.replace('(^((?!star).)*$)', 'trapezoid')

print(df)
    Color      Shape
0    blue       star
1     red  trapezoid
2  purple  trapezoid
2 голосов
/ 11 апреля 2019

Если использование .replace не является необходимостью, то это работает

df

     Color     Shape
0     blue      star
1      red  triangle
2   purple    square

df.Shape[df.Shape != "star"] = "trapezoid"
df


     Color      Shape
0     blue       star
1      red  trapezoid
2   purple  trapezoid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...