IT

Pandas DataFrame에서 열 값 경향

lottoking 2020. 8. 18. 07:56
반응형

Pandas DataFrame에서 열 값 경향


데이터 프레임의 한 열에있는 값을 바꾸려고합니다. 열 ( 'female')에는 'female'및 'male'값만 포함됩니다.

나는 다음을 시도했다 :

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

그러나 이전 결과와 똑같은 사본을받습니다.

이상적으로는 다음 루프 요소와 즐길 수 있고 싶습니다.

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

gotchas 문서 ( http://pandas.pydata.org/pandas-docs/stable/gotchas.html )를 나타 냈지만 아무 일도 일어나지 않는 이유를 알 수 없습니다.

도움을 주시면 감사하겠습니다.


내가 동의한다면 다음과 같은 것을 원합니다.

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

(여기서는 숫자를 포함하는 대신에 숫자로 값을 변환합니다. 원하는 경우 "1"로 변환 할 수있는 "0"이유를 모르겠습니다.)

사용하기 때문에 코드가 작동하지 않는 이유는 ['female']별장에 (두 번째 'female'당신의가 w['female']['female']) 없습니다 평균 "값이 '여성'인 행을 선택"을 수행합니다. 이는 인덱스 가 '여성'인 행을 선택하는 것을 의미 하며이 중 DataFrame에는 없을 수 있습니다.


loc을 사용하여 데이터 프레임의 하위 집합을 편집 할 수 있습니다.

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

이 경우 :

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

w.female.replace(to_replace=dict(female=1, male=0), inplace=True)

pandas.DataFrame.replace () 문서를 참조하십시오 .


약간의 변화 :

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

이것은 또한 작동합니다.

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

즉, apply와 함께 사용할 수도 있습니다..get

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

w = pd.DataFrame({'female':['female','male','female']})
print(w)

데이터 프레임 w:

   female
0  female
1    male
2  female

apply사전에서 값을 대체하는 데 사용 :

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

결과 :

   female
0       1
1       0
2       1 

참고 : apply 데이터 프레임에있는 열의 가능한 모든 값이 사전에 정의되어있는 경우 사전과 함께 사용해야합니다. 그렇지 않으면 사전에 정의되지 않은 항목에 대해서는 비어있게됩니다.


또는 다음과 같은 할당을위한 내장 함수 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)

그런 다음 '여성'의 더미 코딩을 제공하는 두 개의 새로운 열이 남고 문자열이있는 열을 제거했습니다.


이것은 매우 간결합니다.

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

또 다른 좋은 점 :

w['female'] = w['female'].replace(regex='female', value=1)
w['female'] = w['female'].replace(regex='male', value=0)

이러한 유형의 작업을 자동으로 수행하는 데 사용할 수 있는 pandas호출 함수도 factorize있습니다. 레이블을 숫자로 변환 ['male', 'female', 'male'] -> [0, 1, 0]합니다.. 자세한 내용은 답변을 참조하십시오.


나는 대답에서 위에서 제안한 모든 방법에서 어떤 유형의 객체를 얻었는지 지적해야한다고 생각합니다 : Series 또는 DataFrame입니다.

당신은에 의해 열을 얻을 때 w.female.또는 w[[2]](가정이 당신의 열 번호) 당신이 DataFrame을 다시 얻을 것입니다. 따라서이 경우 .replace.

Series 를 사용 .loc하거나 iloc돌아 오면 Series에 .replace메소드가 없으므로 apply, 등과 같은 메소드를 사용해야합니다 map.

참고 URL : https://stackoverflow.com/questions/23307301/replacing-column-values-in-a-pandas-dataframe

반응형