2017-02-12 2 views
0

Ich habe einen Datenrahmen wie folgt aus:Pandas kann nicht vermeiden SettingWithCopyWarning

A  B  C 

15 'ds' ' 0.000' 
32 'ds' ' 1.000' 
56 'ds' ' 2,700.000' 
45 'gb' ' 7.000' 

Ich möchte die Werte der Spalte C auf ganze Zahlen ändern; Also, was ich tun, ist so etwas wie dieses:

df.loc[:,'C'] = df.loc[:,'C'].apply(lambda x: int(float(x.strip().replace(',','')))) 

Das die Arbeit erledigen, aber ich, dass ärgerlich SettingWithCopyWarning bekommen. Warum erscheint das, wenn ich loc verwende?

Antwort

0

würde ich den folgenden Ansatz verwenden:

In [292]: df['C'] = pd.to_numeric(df['C'].str.strip().str.replace(',', ''), errors='coerce') 

In [293]: df 
Out[293]: 
    A B  C 
0 15 ds  0.0 
1 32 ds  1.0 
2 56 ds 2700.0 
3 45 gb  7.0 

In [294]: df.dtypes 
Out[294]: 
A  int64 
B  object 
C float64 
dtype: object 
0

Pandas hebt diese Warnung in einigen Fällen mit falsch-positiven (dh wenn es auf Grund der Größenordnung von Zuweisungen, Sie auf eine Kopie zuweisen konnte, aber im aktuellen Szenario nicht). Diese Antwort ist hilfreich: How to deal with SettingWithCopyWarning in Pandas?

... aber persönlich, wenn ich .loc bin mit und immer noch die Warnung empfängt, nehme ich den Schritt in der obigen Antwort angeboten und deaktivieren Sie die Warnung: pd.options.mode.chained_assignment = None

Verwandte Themen