2017-11-06 6 views
1

CSV 파일이 있고 그것을 조작하기 위해 팬더를 사용하고 있습니다. 예를 들어, ... 나는 열이 배열의 값이 포함되어있을 경우 확인하고, 나는 값을 변경이없는 경우 지금 주어진 값이 포함되어 있지 않으면 열 값을 변경하십시오.

searchfor = ['LANGUAGES', 'FRENCH'] 
data.loc[data['field'].str.contains('|'.join(searchfor), na=False), 'field'] = 16 

내가 반대를 수행하려는 경우? 배열에 배열의 값이 포함되어 있지 않으면 변경하십시오. 따라서 열 값이 Languages 또는 FRENCH이 아니면 int으로 변경하십시오. 내가 사용하는 배열이 매우 클 수 있으므로 확장 가능한 대답이 필요합니다.

감사

답변

3

당신은하지 않습니다에 대한 '~'연산자를 사용할 수 있습니다

data = pd.DataFrame({'field': ['LANGUAGES', 'FRENCH', 'BLAH', None, np.nan, 'Languages']}) 

searchfor = ['LANGUAGES', 'FRENCH'] 

data = data.loc[~data['field'].str.contains('|'.join(searchfor), na=False), 'field'] = 16 

당신은

를 얻을 수
field 
0 LANGUAGES 
1 FRENCH 
2 16 
3 16 
4 16 
5 16 

코드는 대소 문자를 처리하지 않습니다. str.upper()를 먼저 사용하십시오.

data = data.loc[~data['field'].str.upper().str.contains('|'.join(searchfor), na=False), 'field'] = 16 

    field 
0 LANGUAGES 
1 FRENCH 
2 16 
3 16 
4 16 
5 Languages 
1

물결표 (~)와 부울 인덱서를 무효 :.

data.loc[~data['field'].str.contains('|'.join(searchfor), na=False), 'field'] = 16 
관련 문제