Beim Auswählen von Daten aus einem Pandas-Datenframe wird manchmal eine Ansicht zurückgegeben, und manchmal wird eine Kopie zurückgegeben. Während es eine Logik dahinter gibt, gibt es eine Möglichkeit, Pandas zu zwingen, explizit eine Ansicht oder eine Kopie zurückgeben?Force Rückkehr von "View" statt in Pandas kopieren?
Antwort
Es gibt zwei Teile auf Ihre Frage: (1), wie eine Ansicht zu machen (unten auf dieser Antwort sehen), und (2), wie eine Kopie zu machen.
Ich werde mit einigen Beispieldaten zeigen:
import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6],[None,10,20],[7,8,9]], columns=['x','y','z'])
# which looks like this:
x y z
0 1 2 3
1 4 5 6
2 NaN 10 20
3 7 8 9
Wie eine Kopie zu erstellen: Eine Möglichkeit ist, Ihren Datenrahmen explizit zu kopieren, nachdem unabhängig von Operationen, die Sie ausführen. Zum Beispiel können, sagen wir Zeilen auswählen, die nicht NaN haben:
df2 = df[~df['x'].isnull()]
df2 = df2.copy()
Dann, wenn Sie Werte ändern in dF2 werden Sie feststellen, dass die Änderungen propagieren nicht wieder auf die ursprünglichen Daten (df), und dass Pandas warnt nicht, dass
df2['x'] *= 100
# original data unchanged
print(df)
x y z
0 1 2 3
1 4 5 6
2 NaN 10 20
3 7 8 9
# modified data
print(df2)
x y z
0 100 2 3
1 400 5 6
3 700 8 9
Note „ein Wert auf einer Kopie von einer Scheibe aus einem Datenrahmen zu setzen versucht“: Sie haben eine Leistung von explizit eine Kopie traf in Anspruch nehmen.
Wie Warnungen ignorieren: Alternativ kann in einigen Fällen könnten Sie nicht egal, ob eine Ansicht oder Kopie zurückgegeben wird, weil Ihre Absicht, dauerhaft ist, um die Daten zu ändern und nie auf die Originaldaten zurückgehen. In diesem Fall können Sie die Warnung unterdrücken und auf Ihrem Weg fröhlich weitergehen (vergessen Sie nicht, dass Sie sie ausgeschaltet haben und dass die Originaldaten möglicherweise von Ihrem Code geändert werden oder nicht, da df2 dies kann oder auch nicht) sein eine Kopie):
pd.options.mode.chained_assignment = None # default='warn'
weitere Informationen finden Sie die Antworten auf How to deal with SettingWithCopyWarning in Pandas?
Wie man einen Blick machen: Pandas wird implizit Ansichten machen, wo immer und wann immer möglich. Der Schlüssel dazu ist die Verwendung der df.loc[row_indexer,col_indexer]
Methode. Zum Beispiel die Werte der Spalte y
100 für nur die Zeilen zu multiplizieren, wo Spalte x
nicht null ist, würden wir schreiben:
mask = ~df['x'].isnull()
df.loc[mask, 'y'] *= 100
# original data has changed
print(df)
x y z
0 1.0 200 3
1 4.0 500 6
2 NaN 10 20
3 7.0 800 9
jeffgoldblumthereitis.gif :-D – calben
Diese Antwort, frustrierend, beantwortet das Gegenteil der gestellten Frage, genau wie der Rest des Internets. -1 –
Die Frage war "Gibt es eine Möglichkeit, Pandas zu zwingen, eine Ansicht oder eine Kopie explizit zurückzugeben?" auf die ich antwortete, wie man explizit eine Kopie macht. Ich nehme an, der frustrierende Teil ist, wenn Sie explizit eine Ansicht wünschen? Beachten Sie auch, dass der Fragetitel von der Frage in der Beschreibung abweicht ... was nicht hilft. – MD004
- 1. Rückkehr Float statt Ganzzahl
- 2. pandas dataframe view vs kopieren, wie kann ich sagen?
- 3. mod_wsgi Ausbeute Ausgabepuffer statt Rückkehr
- 4. Force Nosetests Python 2.7 statt 3.4 verwenden
- 5. JsonObj.getString (key) Rückkehr 0 statt 0000
- 6. jQuery Ajax Rückkehr negative Zahlen statt Inhalt
- 7. View erscheint mit Modal View Animation statt Show (Push) Animation
- 8. ASMX Webservice - Rückkehr JSON statt XML
- 9. Rückkehr zur Funktion statt "0" oder "Variable"
- 10. Pandas Datenrahmen, kopieren nach Wert
- 11. findall() Rückkehr ganze Reihe statt Liste
- 12. mysql UDF Rückkehr INT statt STRING
- 13. Summe des Umsatzes Rückkehr Liste statt insgesamt
- 14. JQuery den Link statt Rückkehr falsch
- 15. Modal View Controller Force Querformat in iOS 6
- 16. Pandas: Merge oder Rückkehr Join falsche Datenrahmen
- 17. Laravel mail: pass string statt view
- 18. Rückkehr eine einfachere Iterator-Schnittstelle statt einer Karte in Rust
- 19. Pandas DataFrame Zeile in mehrere andere Zeilen kopieren
- 20. Force Rails Paypal gem zu verwenden Sandbox statt Live
- 21. Struktur kopieren in C mit Zuweisung statt memcpy()
- 22. Frühling boot - Rückkehr 403 statt Umleitung Forbidden Seite Web-Anwendung
- 23. Datumsformat wie M/d/yyyy Rückkehr statt MM/tt/C#
- 24. Wie url_for Rückkehr zu machen aufgeschlitzt Parameter statt
- 25. Warum Helfer von std :: tuple Rückkehr rvalue Referenz bekommt statt Wert
- 26. plt.errorbar Problem: FutureWarning: elementweiser Vergleich fehlgeschlagen; Rückkehr Skalar statt
- 27. Rückkehr
- 28. Rückkehr Provisorien vom Typ mit gelöscht verschieben/kopieren ctor
- 29. Force UIView/UIVIewController Ausrichtung
- 30. Force messagebox in den Vordergrund
Können Sie eine Probe aus der Differenz zwischen dem Ziel und eine Kopie? – cwharland
Siehe hier für die Regeln: http://StackOverflow.com/Questions/23296282/What-Rules-Does-Pandas-use-To-Generate-Aview-VS-Audio –
@cwharland, mein Verständnis ist Modifikationen In einer Ansicht ändern Sie auch den primären Datenrahmen (also eine Referenz), und eine Kopie ist ... eine Kopie. – calben