2014-04-26 5 views
47

데이터 프레임의 한 열에있는 값을 바꾸려고합니다. 열 ('여성')에는 '여성'및 '남성'값만 포함됩니다.팬더 : 데이터 프레임의 열 값 바꾸기

w['female']['female']='1' 
w['female']['male']='0' 

을하지만 이전 결과의 동일한 복사본을받을 :

나는 다음과 같은 노력했다.

다음 루프와 비슷한 출력을 얻는 것이 이상적입니다.

if w['female'] =='female': 
    w['female'] = '1'; 
else: 
    w['female'] = '0'; 

나는 개는 문서 (http://pandas.pydata.org/pandas-docs/stable/gotchas.html)를 통해 검토 한하지만 아무 반응이없는 이유를 알아낼 수 없습니다.

도움이 될 것입니다. 내가 바로 이해한다면

+0

루프가 어디에 있습니까? – theharshest

답변

96

, 당신은 같은 것을 원한다.

w['female'] = w['female'].map({'female': 1, 'male': 0}) 

을 (저는 여기에 숫자 대신 숫자를 포함하는 문자열로 값을 변환 당신이 정말로 원하는 경우, "1""0"로 변환 할 수 있습니다, 하지만 왜 그걸 원할 지 모르겠다.)

을 열 (w['female']['female']의 두 번째 'female')에 사용하면 코드가 작동하지 않는 행을 선택할 수 있다는 의미가 아닙니다. 값은 '여성'입니다. " 색인이 '여성'인 행을 선택하는 것을 의미합니다. 그 중 일부는 DataFrame에 없을 수 있습니다.

+0

감사합니다. 정확히 내가 무엇을 찾고 있었는지. '여성'을 1로 매핑하고 다른 것은 '0'으로 매핑해야합니다. 어떻게 작동할까요? – Black

+3

은 column의 모든 값이 map 함수에 주어진 경우에만 사용합니다. map 함수에 지정되지 않은 열 값은 nan으로 바뀝니다. – Chandra

+0

'SettingWithCopyWarning'을 피하기 위해'.loc' 문법을 사용할 것을 권장합니다 : https://pandas.pydata.org/pandas-docs/stable/indexing.html#different-choices-forexinding – NickBraunagel

54

당신은 loc을 사용하여 dataframe의 일부를 편집 할 수 있습니다

df.loc[<row selection>, <column selection>] 

을이 경우 :

w.loc[w.female != 'female', 'female'] = 0 
w.loc[w.female == 'female', 'female'] = 1 
+0

어떻게 적응할 수 있습니까? 그래서 조건을 통해 특정 행을 선택할 필요가 없으며 특정 열의 모든 행만 선택할 수 있습니까? 따라서 열의 모든 셀을 특정 값으로 변경하십시오. –

+1

@DhruvGhulati, df.loc [:, ]을 사용하십시오. –

13

약간의 변화 :

w.female.replace(['male', 'female'], [1, 0], inplace=True) 
8

이 또한 작동합니다 :

w.female[w.female == 'female'] = 1 
w.female[w.female == 'male'] = 0 
5

을 다른 방법으로이 과제의 이러한 종류의 내장 함수 pd.get_dummies :

w['female'] = pd.get_dummies(w['female'],drop_first = True) 

이렇게하면 w [ 'female']에서 발생하는 각 값에 대해 하나씩 두 개의 열이있는 데이터 프레임이 제공됩니다. 첫 번째를 버리십시오 (왼쪽에서 추측 할 수 있기 때문에). 새 열의 이름은 교체 한 문자열로 자동 지정됩니다.

두 개 이상의 가능한 값이있는 범주 형 변수가있는 경우 특히 유용합니다. 이 함수는 모든 경우를 구별하는 데 필요한 많은 더미 변수를 만듭니다.W [female]이 'male', 'female'또는 'neutral'일 수있는 경우에는 다음과 같이하십시오.

w = pd.concat([w, pd.get_dummies(w['female'], drop_first = True)], axis = 1]) 
w.drop('female', axis = 1, inplace = True) 

그러면 '여성'이라는 더미 코딩을 제공하는 두 개의 새로운 열이 남고 문자열로 열을 제거합니다.

1

pandas에는 factorize이라는 기능이 있으며이 유형의 작업을 자동으로 수행하는 데 사용할 수 있습니다. 라벨을 숫자로 변환합니다 : ['male', 'female', 'male'] -> [0, 1, 0]. 자세한 내용은 this 답변을 참조하십시오.

관련 문제