Podczas wybierania danych z ramki danych Pandy, czasami widok jest zwracany, a czasami zwracana jest kopia. Podczas gdy istnieje logika, czy istnieje sposób na wymuszenie Pandy na jawnie zwrócenie widoku lub kopii?Wymuszenie zwrotu "Widok" zamiast kopiowania w Pandach?
Odpowiedz
Masz dwie części pytania: (1) jak zrobić widok (patrz dół tej odpowiedzi) i (2) jak zrobić kopię.
będę wykazywać niektóre przykładowe dane:
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
Jak wykonać kopię: Jedną z opcji jest wyraźnie skopiować DataFrame po dowolnych operacji wykonywanych. Na przykład, powiedzmy, że mamy do wyboru wierszy, które nie mają NaN:
df2 = df[~df['x'].isnull()]
df2 = df2.copy()
Następnie, jeśli zmodyfikować wartości w df2 można zauważyć, że modyfikacje nie propagują powrót do oryginalnych danych (DF), i że pandy nie ostrzega, że „wartość próbuje być ustawiony na kopię wycinka ze DataFrame”
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
Uwaga: można podjąć działania hit jawnie wykonywania kopii.
Jak ignorować ostrzeżenia: Alternatywnie, w niektórych przypadkach może nie obchodzi, czy jest zwracany w widoku lub kopiowaniem, ponieważ intencją jest stale modyfikować dane i nigdy nie wrócić do oryginalnych danych. W takim przypadku możesz wyłączyć ostrzeżenie i iść wesoło (po prostu nie zapominaj, że je wyłączyłeś i że oryginalne dane mogą zostać zmodyfikowane przez Twój kod, ponieważ df2 może, ale nie musi, być kopią):
pd.options.mode.chained_assignment = None # default='warn'
aby uzyskać więcej informacji, zobacz odpowiedź na How to deal with SettingWithCopyWarning in Pandas?
Jak zrobić widok: Pandy będzie niejawnie dokonywania widoki gdziekolwiek i kiedykolwiek możliwe. Kluczem do tego jest użycie metody df.loc[row_indexer,col_indexer]
. Na przykład, aby pomnożyć wartości kolumny y
przez 100 tylko wiersze, gdzie kolumna x
nie jest NULL, to piszemy:
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
Ta odpowiedź, frustrująco, odpowiada na przeciwieństwo zadanego pytania, tak jak reszta internetu. -1 –
Pytanie brzmiało: "czy istnieje sposób zmuszenia Pand do wyraźnego zwrócenia widoku lub kopii?" na które odpowiedziałem, jak jawnie zrobić kopię. Przypuszczam, że frustrujące jest to, że zamiast tego wyraźnie chciałeś widoku? Należy również pamiętać, że tytuł pytania różni się od pytania w opisie ... co nie pomaga. – MD004
- 1. Widok kontrolera zwrotu sprężyny i JSON Razem
- 2. W Pandach, czy metoda .iloc daje kopię lub widok?
- 3. Wymuszenie UIView/UIVIewController orientation
- 4. Wymuszenie przeglądarki, aby pobrać dokument PDF zamiast go otworzyć
- 5. Jak znaleźć Widok z ciągiem zamiast R.id
- 6. Eclipse + Maven: wymuszenie środowiska wykonawczego "JavaSE-1.6" zamiast poprawionego JDK
- 7. Wymuszenie uruchomienia VBS przy użyciu cscript zamiast wscripta
- 8. OpenERP zawsze wyświetla odziedziczony widok zamiast oryginalnych
- 9. Warunkowa wymiana w pandach
- 10. Wymuszenie zwrotu xml na niektórych kontrolerach internetowych api przy jednoczesnym zachowaniu domyślnego JSON
- 11. Serializacja XML .net - Zapisywanie odniesienia zamiast kopiowania obiektów
- 12. Dlaczego zamiast konstruktora konwersji wywoływany jest konstruktor kopiowania?
- 13. Przełącz niewłaściwą wartość zwrotu
- 14. funkcja loc w pandach
- 15. Spłaszczanie tablicy w pandach
- 16. Łączenie wierszy w pandach
- 17. Wielokolumnowy faktoryzacja w pandach
- 18. Prosta krzyżówka w pandach
- 19. Zakresy dat w Pandach
- 20. Wiele histogramów w Pandach
- 21. Definicje rekursywne w pandach
- 22. Różnicowanie czasu w pandach
- 23. Próbkowanie warstwowe w pandach
- 24. Dplyr podsumowuje ekwiwalent w pandach
- 25. Co dzieje się w tym oświadczeniu zwrotu?
- 26. Wymuszenie odświeżenia obrazu tła
- 27. wiele wartości zwrotu w funkcji
- 28. Wymuszenie odżegnania
- 29. Wymuszenie odpowiedzi HTTP w celu zwrócenia statusu 200 w Railsach
- 30. Zakaz definiowania konstruktora kopiowania w odziedziczonej klasie
można dostarczyć próbkę różnicy między myślą a kopia? – cwharland
Zobacz tutaj: http://stackoverflow.com/questions/23296282/what-rules-does-pandas-use-to-generate-a-view-vs-a-kopia –
@cwharland, moim zrozumieniem są modyfikacje do widoku modyfikuje również podstawową ramkę danych (tak więc odniesienie), a kopia jest ... kopią. – calben