2016-06-13 6 views
0

실제 데이터를 공유 할 수 없습니다. 그래서 저는 예를 들고 있습니다.팬더를 사용하여 문자열의 나머지 단어를 왜곡시키지 않고 문자열의 마지막 단어를 빈 문자열로 바꾸는 방법은 무엇입니까?

Suffix_List = ["Ltd.", "Inc.", "Limited", "Corp.", "AG"] 

내가 열 포함 된 회사 이름과 데이터 프레임을 가지고 - 나는 접미사 목록이 있다고 가정 . 회사 이름의 접미사를 빈 문자열로 바꾸고 싶습니다. 회사 이름의 나머지 부분을 왜곡해서는 안됩니다. 예 : 회사 이름이 "CAGE AG"라고합시다. "AG"는 회사 이름이 아닌 접미사에서 제거해야합니다. 결과는 단지 "CAGE"여야합니다. 또한 Suffix_List에 접미사가 있으면 제거해야합니다.

for suffix in Suffix_List: 
    df['company_name'] = df['company_name'].str.replace(suffix,"") 

를하지만이 역시 실제 회사 이름을 왜곡 -

지금은 사용하고 있습니다.

샘플 회사 이름이 될 수있다 - 임금이 제한 CAGE AG, 다케 (주), 세이지 Inc의

답변

2

당신은 접미사 밖으로 대체 할 정규 표현식을 사용할 수 있습니다

In [11]: re.sub("\s?(" + "|".join(Suffix_List) + ")$", "", "CAGE AG") 
Out[11]: 'CAGE' 

이 보이는을하는지 어떤 (|)는 문자열을 끝냅니다 ($). 시리즈/열

당신이 str.replace를 사용할 수 있습니다

In [21]: df = pd.DataFrame([["CAGE AG"], ["Stack Exchange Inc."]], columns=["company"]) 

In [22]: df 
Out[22]: 
      company 
0   CAGE 
1 Stack Exchange 

In [23]: df["company"] = df["company"].str.replace("\s?(" + "|".join(Suffix_List) + ")$", "") 

In [24]: df 
Out[24]: 
      company 
0   CAGE 
1 Stack Exchange 
+0

을 우리가 조건을 추가하려면 어떻게 :. "회사"] = 안양 [ "기업"] df라고 str.replace을 ("\ s의 ? "("+ "|".join (Suffix_List) + ") $", "") 그래서 한 단어 회사는 왜곡되지 않습니다. 예 : - 회사 이름은 "ZINC"입니다. 왼쪽에서 회사 이름이 "Z"일 뿐이므로 여기에서 INC를 제거하는 것은 올바르지 않습니다. – ComplexData

+0

@ user6461192 아마도 공간이 필요할 수 있습니까? 예 : '\ s? '보다는 처음에'\ s +'로 표시됩니다. –

+0

감사합니다. 그것은 효과가있었습니다. 단어로 사용 된 정규식의 의미를 나에게 말할 수 있다면 좋을 것입니다. str.replace ("\ s? ("+ "|".join (Suffix_List) + ") $", "") – ComplexData

관련 문제