2017-01-26 3 views
3

Die folgende Zeile meines Codes eine Warnung verursacht:df.loc verursacht eine SettingWithCopyWarning Warnmeldung

import pandas as pd 

s = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD')) 
s.loc[-1] = [5,np.nan,np.nan,6] 
grouped = s.groupby(['A']) 
for key_m, group_m in grouped: 
    group_m.loc[-1] = [10,np.nan,np.nan,10] 

C:\Anaconda3\lib\site-packages\ipykernel\__main__.py:10: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame 

Nach dem documentation Dies ist die empfohlene Art und Weise zu tun, so was passiert?

Danke für Ihre Hilfe.

+1

Sie müssen zeigen, der komplette Code von der Erstellung des df bis zu dieser Zeile, damit wir helfen können – EdChum

Antwort

3

Die Dokumentation ist leicht verwirrend.

Ihre dataframe ist eine Kopie einer anderen dataframe. Sie können dies überprüfen, indem Sie bool(df.is_copy) ausführen Sie erhalten die Warnung, weil Sie versuchen, diese Kopie zuzuweisen.

Die Warnung/Dokumentation sagt Ihnen, wie Sie df an erster Stelle konstruiert haben sollten. Nicht, wie Sie es jetzt zuweisen sollten, dass es eine Kopie ist.

df = some_other_df[cols] 

wird df eine Kopie some_other_df machen. Die Warnung schlägt vor, dies zu tun, anstatt

df = some_other_df.loc[:, [cols]] 

Nun, da es fertig ist, wenn Sie diese Warnung wählen ignorieren, könnten Sie

df = df.copy() 

oder

df.is_copy = None 
Verwandte Themen