2016-07-28 3 views
0

私は、Python 3 Jupyterノートブックのデータフレームにアンケート回答のExcelシートを読み、特定のプログラムに個人がいる行を削除したいと考えています。ですから、私はデータフレーム 'df'から.locを使って新しいデータフレーム 'dfgeneral'にサブセット化しました。Pythonでデータフレームをサブセット化して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,:] 

この行(2行目)は、DataFrameのスライスを取り、それを変数に割り当てます。その変数を操作する場合、警告が表示されます(値は、DataFrameからスライスのコピーに設定しようとしています)。

変更にそのライン:

dfgeneral = df.loc[notnurse, :].copy() 
関連する問題