2016-07-28 1 views
0

필자는 Python 3 Jupyter 노트북의 데이터 프레임에 대한 설문 응답의 Excel 시트를 읽고 특정 프로그램에있는 개인이있는 행을 제거하려고합니다. 그래서 저는 dataframe 'df'에서 .loc을 사용하여 새로운 데이터 프레임 'dfgeneral'로 부분 집합했습니다.데이터 프레임을 부분 집합하고 파이썬에서 SettingWithCopy 경고를 해결하는 방법?

notnurse = df['Program Code'] != 'NSG' 
dfgeneral = df.loc[notnurse,:] 

나는 다음을 나타내는 데 사용 된 코드에 (즉, 만족, 만족하지 않음) 라벨을지도하고, 각 응답을 준 응답자의 수를 찾고 싶어요. 몇 가지 질문은 같은 규모를 사용, 그래서 나는 그들을 통해 루프 :

출력에서 ​​
q5list = ['Q5_1','Q5_2','Q5_3','Q5_4','Q5_5','Q5_6'] 

scale5_dict = {1:'Very satisfied',2:'Satisfied',3:'Neutral', 
       4:'Somewhat dissatisfied',5:'Not satisfied at all', 
       np.NaN:'No Response'} 

for i in q5list: 
    dfgeneral[i] = df[i].map(scale5_dict) 
    print(dfgeneral[i].value_counts(dropna=False)) 

, 내가 SettingWithCopy 경고 얻을 :

A value is trying to be set on a copy of a slice from a DataFrame. 
Try using .loc[row_indexer,col_indexer] = value instead 

내가 dfgeneral 만들 .loc 사용을; 이것은 거짓 긍정입니까, 아니면 어떤 변화를해야합니까? 도와 줘서 고마워.

답변

3
dfgeneral = df.loc[notnurse,:] 

이 줄 (두 번째 줄)은 DataFrame 조각을 가져 와서 변수에 할당합니다. 해당 변수를 조작하려면 경고가 표시됩니다 (값은 DataFrame에서 슬라이스 복사본에 설정하려고 시도 중입니다).

dfgeneral = df.loc[notnurse, :].copy() 
:에 줄

변경

관련 문제