2016-07-28 8 views
0

Ich habe in einem Python 3 Jupyter-Notizbuch eine Excel-Tabelle von Umfrageantworten in einen Datenrahmen gelesen und möchte Zeilen entfernen, in denen sich die Personen in einem bestimmten Programm befinden. Also habe ich Teilmenge von Datenrahmen 'df' zu einem neuen Datenrahmen 'dfgeneral' mit .loc.Wie Unterteilung eines Datenrahmens und die Behebung der SettingWithCopy Warnung in Python?

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

Ich möchte dann Etiketten zur Karte (d zufrieden, nicht zufrieden) zu den Codes, die verwendet wurden, um sie darzustellen, und die Anzahl der Befragten zu finden, die jede Antwort gab. Mehrere Fragen verwenden den gleichen Maßstab, so dass ich durchgeschleift sie:

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)) 

In der Ausgabe, erhalte ich die SettingWithCopy Warnung:

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 

I verwendet .loc dfgeneral zu schaffen; Ist das ein falsches Positiv oder welche Veränderung sollte ich machen? Danke für Ihre Hilfe.

Antwort

3

Diese Zeile (zweite Zeile) nimmt eine Scheibe des DataFrame und weist sie einer Variablen zu. Wenn Sie diese Variable manipulieren möchten, wird die Warnung angezeigt (Ein Wert wird für eine Kopie eines Segments aus einem Datenrahmen festgelegt).

Änderung, die an der Leitung:

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