2017-02-09 2 views
2

팬더와 공통점이있는 작업은 Excel 파일에서 테이블을 읽은 다음 모든 필드에서 세미콜론을 제거하는 것입니다. 열은 혼합 된 데이터 유형에 종종이 같은 일을 할 셈 때 나는 AtributeError으로 실행 for col in cols_to_check: df[col] = df[col].map(lambda x: x.replace(';',''))전체 데이터 프레임에서 문자 제거

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

나는 유니 코드 문자, 예를 들어, 문제가있는 교체하기 전에 str()에 포장 할 때 이것은 매우 간단한 작업입니다 Excel에서 for col in cols_to_check: df[col] = df[col].map(lambda x: str(x).replace(';',''))

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3: ordinal not in range(128)

, 걸리는 모든 빈 문자열로 ;을 교체하는 것입니다. 전체 데이터 프레임에 대해 판다에서 유사하게 수행 할 수 있습니까? 데이터 유형을 무시합니까? 또는 나는 무엇인가 놓치고 있냐?

답변

1

당신은 선택 사용 subset에 대한 DataFrame.replace을 사용하고 있습니다 :

df = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6], 
        'C':['f;','d:','sda;sd'], 
        'D':['s','d;','d;p'], 
        'E':[5,3,6], 
        'F':[7,4,3]}) 

print (df) 
    A B  C D E F 
0 1 4  f; s 5 7 
1 2 5  d: d; 3 4 
2 3 6 sda;sd d;p 6 3 

cols_to_check = ['C','D', 'E'] 

print (df[cols_to_check]) 
     C D E 
0  f; s 5 
1  d: d; 3 
2 sda;sd d;p 6 

df[cols_to_check] = df[cols_to_check].replace({';':''}, regex=True) 
print (df) 
    A B  C D E F 
0 1 4  f s 5 7 
1 2 5  d: d 3 4 
2 3 6 sdasd dp 6 3 
+0

덕분에,이 일! 제가 누락 한 것은'regex = True'였습니다. 그것이 없으면'replace'가 부분 문자열이 아닌 전체 문자열을 찾습니다 (엑셀의 전체 셀 내용 옵션과 동일). – user3087386

+0

네, 맞습니다. 받아 들여 주셔서 감사합니다! – jezrael

+0

답변에 약간의 업데이트를 제안합니다. 내 질문에 나는 데이터 형식을 열 (열 사이뿐만 아니라)에 혼합했다는 것을 언급했다. 그러나 귀하의 예제에서는 일관된 데이터 유형을 사용합니다. 또한 문자열로 만 열을 확인하지만, 'df = df.replace ({ ';': ''}, regex = True) ' 도 열 중 하나를 변경하더라도 작동합니다. '[ 'a;', 1.02, 'b']' – user3087386

관련 문제