2016-06-10 8 views
0

Beim Versuch, eine Spalte von Zahlen von object zu float dtypes Pandas Datenrahmen zu ändern, indem ich die folgende Warnung angezeigt:Richtiger Weg zu nutzen .loc in Python Pandas

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 

Nun wird der Code läuft ganz gut, aber was wäre die bestimmungsgemäße Art und Weise, diese Warnung zu vermeiden und immer noch erreicht das Ziel:

df2[col] = df2[col].astype('float') 

es sei darauf hingewiesen, dass df2 eine Teilmenge von DF1 ist mit einem Zustand ähnlich:

df2 = df1[df1[some col] == value] 
+1

Die Warnung wird ausgegeben, wenn 'df' selbst eine Kopie eines Teils eines anderen Datenrahmens ist. Es ist eine Warnung, dass das Ändern von 'df' keinen Einfluss auf diesen anderen Datenrahmen hat. Also schlage vor, wie man die Warnung anspricht/vermeidet (was vielleicht nicht wirklich notwendig ist), wir müssten sehen, wie "df" definiert ist. – unutbu

+0

bearbeitet jetzt, danke für die heads-up – Lisle

Antwort

2

Verwenden Sie die Methode copy. Statt:

df2 = df1[df1[some col] == value] 

Schreiben Sie einfach:

df2 = df1[df1[some col] == value].copy() 

Anfänglich ist df2 ein Stück df1 und kein neues Datenrahmen. Wenn Sie also versuchen, es zu ändern, löst Python einen Fehler aus.