2017-11-21 5 views
1

나는 컬럼의 문자열은 단순히 것 대체 이해 :python to_replace 문자열이 값과 같지 않습니까?

df['surf'].replace(to_replace='Grass', value='Turf') 

이 내 열에서 '터프'과 '잔디'의 모든 값을 대체합니다. 그러나 나는 그 반대를 원한다. 나는 =! ~을 사용하여 찾아 보려고했지만, 작동시키지 못했습니다.

내가 원하는 경우 모든 값은 '잔디' '잔디'로 교체 할 NOT 무엇

편집 : 나는 추가해야합니다, 나는 그것을 할 수 있습니다

df.loc[df['surf'] != 'Grass', 'surf'] = 'Turf' 

하지만 궁금했다가 당신이 할 수있는 부정적 예측 및 정규식 모드를 사용할 수있는 .replace

+2

를 [워드 프로세서] (HTTPS//pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html), to_replace는 정규 표현식이 될 수 있습니다. – glibdud

답변

2

있는 방법은 당신이 원하는 무슨 :

df['surf'] = df['surf'].replace(to_replace=r"^(.(?<!Grass))*?$", value='Turf',regex=True) 
,515,

기본적 정규식 기반 여분 행하는, str.replace을 사용


대안 (워드 트릭이지만 일치 모든 How to negate specific word in regex? 빼앗아)에 따르면

df['surf'] = df['surf'].str.replace(r"^(.(?<!Grass))*?$", "Turf") 
+0

@COLDSPEED 감사, 우수한 편집. 'inplace = True '를 설정하지 않고'df ['surf ']'에 할당하는 것보다 낫다. (판다 전문가가 아니라, 당신은 나에게 말한다). 또한, 원시 접두사는 여기에 필요하지 않습니다, 정규식에 백 슬래시가 없습니다. –

+0

문제 없습니다. 또한'inplace = True'를 설정하면 전체 데이터 프레임을 기준으로 작동합니다. 열을 분할 할 때 상황이 불확실 해집니다 (슬라이스가 뷰 또는 사본을 반환하는지 여부에 따라 작동하거나 작동하지 않을 수도 있습니다 - 각 상황이 발생할 때 정확한 인스턴스가 확실하지 않지만 그 점을 알 수 있습니다). 따라서 안전하고 배정하는 것이 좋습니다. 나는 그것이 작동한다고하더라도, 'inplace = True'는 어떤 성능 향상도 제공하지 않는다고 언급해야합니다. 복사본은 만들어 지지만 원본에 다시 지정되므로 명시 적으로 재 할당을 지정할 필요가 없습니다. 일종의 편리한 기능. –

+0

(Psst, 나는 당신의 핑을 얻지 못했다. @ cᴏʟᴅsᴘᴇᴇᴅ : p를 사용해야 할 것이다.) –