전면

2017-12-21 2 views
-1

에 쉼표, 괄호 안의 값으로 판다 열 값 장착 I 한 컬럼 이름을 포함 dataframe 있고, 그것의 부분과 같이, 괄호이다전면

Names 
Apple (juicy) 
Banana (crunchy) 
Grape (sour) 

내가로 변경할 다음 형식 :

Names 
Apple, juicy 
Banana, crunchy 
Grape, sour 

팬더와 정규식을 사용하여 어떻게 수행 할 수 있습니까? 나는 이것을 시도했다 :

df['Names'] = df1['Names'].str.replace(r"\s+\(.*\)",", " + r"\(.*\)") 

하지만 문제는 내가 성공적으로 괄호 안에 무엇이든 전송하는 방법을 모르는 마지막 비트 (R "(*).")입니다. 위의 코드를 사용하면 다음과 같이 표시됩니다.

Names 
Apple, \(.*\) 
Banana, \(.*\) 
Grape, \(.*\) 
+0

왜 정규식인가? 그게 당신에게 문제를 일으키고 필요없는 것입니다. .replace ('(', ',') .replace (')', '')는 작성하고 이해하기가 쉽고 의도를 더 명확하게 전달합니다. – Goyo

+0

흠, 나는이 오류가 발생합니다 : sre_constants.error : missing), 위치 1에있는 종결되지 않은 서브 패턴 – ilee

+0

데이터 프레임 접근 자의 일부 문자를 이스케이프 처리해야합니다 :'df [ 'Names']. str.replace ('\ (' , ',') .str.replace (')', '')'. 또는 aswer에서 제안 된'apply'를 사용하십시오. – Goyo

답변

1

캡처 그룹을 사용하고 교체 부품의 캡처 된 문자를 역 참조를 통해 참조하십시오.

df['Names'] = df1['Names'].str.replace(r"\s+\((.*)\)", r", \1") 
+0

당신은 df [ 'Names'] = df1 [ 'Names']을 의미한다고 생각합니다. str.replace (r "\ s + \ ((. *) \)", r ", \ 1")! 고맙습니다! – ilee

+0

@ilee 이스케이프 처리되지 않은 대괄호가있는 정규식을 의미합니까? 아니, 그 뜻이 아니야. https://regex101.com/r/uyRFy5/1을 참조하십시오. –

+0

죄송합니다. 코드를 잘못 읽었습니다. 당신은 절대적으로 맞습니다 :) – ilee

1

regex을 사용해야합니까?

당신은 할 수있는 모든 문자열에있는 괄호를 제거하는 것이

df['Names'] = df.Names.apply(lambda x: x.replace('(','').replace(')','')) 

.