2016-06-20 7 views
0

비슷한 질문이 있습니다. Pandas DataFrame: remove unwanted parts from strings in a column. 팬더의 문자열에서 문자 제거

그래서 내가 사용 : 항목의

대부분의
temp_dataframe['PPI'] = temp_dataframe['PPI'].map(lambda x: x.lstrip('PPI/')) 

가하는 시작 'PPI /'전부는 아니지만.

AttributeError: 'float' object has no attribute 'lstrip'

내가 여기서 뭔가를 놓치고 있습니까 : 'PPI /'접미사가없는 항목이 오류가 발생하는 경우 것 같다?

+0

값이 누락되었거나 실제 수레가 원인입니까? 이 원인이되는 행의 가치를 보여줄 수 있습니까? (여기에서 배우고 이해하려고 노력하는 것) – bakkal

답변

1

사용 replace :

temp_dataframe['PPI'].replace('PPI/','',regex=True,inplace=True) 

또는 string.replace :

temp_dataframe['PPI'].str.replace('PPI/','') 
+0

덕분에 모든 도움을 주실 수 있습니다. 매우 감사! –

2

사용 str.lstrip을 벡터화 : 당신이 누락 된 값 모른다처럼 당신이 그를 마스크하거나 교체해야하므로

temp_dataframe['PPI'] = temp_dataframe['PPI'].str.lstrip('PPI/') 

보이는 :

temp_dataframe['PPI'].fillna('', inplace=True) 

또는

temp_dataframe.loc[temp_dataframe['PPI'].notnull(), 'PPI'] = temp_dataframe['PPI'].str.lstrip('PPI/') 

어쩌면을 더 좋은 방법은 str.startswith을 사용하여 필터링하고을 사용하는 것입니다. (210) 및 제거 할 접두사 후 문자열에 액세스 : @JonClements이 lstrip 공백을 제거하는 것이 아니라 필요하시면되는 접두사를 제거하고 지적

temp_dataframe.loc[temp_dataframe['PPI'].str.startswith('PPI/'), 'PPI'] = temp_dataframe['PPI'].str.split('PPI/').str[1] 

으로합니다.

갱신

또 다른 방법은 선택적으로 접두사를 찾는 정규식 패턴을 전달하고 접두사 후 모든 문자를 추출하는 것입니다

temp_dataframe['PPI'].str.extract('(?:PPI/)?(.*)', expand=False) 
+2

'.lstrip'은 OP가 원하는 것이 아닐 것입니다 - 그것은'P','I' 또는'/'인 모든 문자를 제거합니다. 문자열이 존재하면 실제로 접두어를 제거하지 않습니다 ... –

+0

@JonClements가 true 일 때 – EdChum

+2

또는 temp_dataframe [ 'PPI']을 업데이트합니다. str.extract ('(? : PPI /)?(.*)' , expand = False)' –