xlabel read leer excelfile example con python pandas chained-assignment

python - read - Pandas: Subindexando los marcos de datos: Copias vs vistas



python read excel (1)

Digamos que tengo un marco de datos

import pandas as pd import numpy as np foo = pd.DataFrame(np.random.random((10,5)))

y creo otro marco de datos a partir de un subconjunto de mis datos:

bar = foo.iloc[3:5,1:4]

¿ bar tiene una copia de esos elementos de foo ? ¿Hay alguna manera de crear una view de esos datos en su lugar? Si es así, ¿qué pasaría si trato de modificar los datos en esta vista? ¿Pandas proporciona algún tipo de mecanismo de copy-on-write ?


Su respuesta se encuentra en los documentos de pandas: returning-a-view-versus-a-copy .

Siempre que una matriz de etiquetas o un vector booleano estén involucrados en la operación de indexación, el resultado será una copia . Con la indexación y el corte de una sola etiqueta / escalar, por ejemplo, df.ix [3: 6] o df.ix [:, ''A''], se devolverá una vista .

En tu ejemplo, la bar es una vista de rebanadas de foo . Si desea una copia , podría haber utilizado el método de copy . La bar modificación también modifica foo . pandas no parece tener un mecanismo de copia en escritura.

Vea mi ejemplo de código a continuación para ilustrar:

In [1]: import pandas as pd ...: import numpy as np ...: foo = pd.DataFrame(np.random.random((10,5))) ...: In [2]: pd.__version__ Out[2]: ''0.12.0.dev-35312e4'' In [3]: np.__version__ Out[3]: ''1.7.1'' In [4]: # DataFrame has copy method ...: foo_copy = foo.copy() In [5]: bar = foo.iloc[3:5,1:4] In [6]: bar == foo.iloc[3:5,1:4] == foo_copy.iloc[3:5,1:4] Out[6]: 1 2 3 3 True True True 4 True True True In [7]: # Changing the view ...: bar.ix[3,1] = 5 In [8]: # View and DataFrame still equal ...: bar == foo.iloc[3:5,1:4] Out[8]: 1 2 3 3 True True True 4 True True True In [9]: # It is now different from a copy of original ...: bar == foo_copy.iloc[3:5,1:4] Out[9]: 1 2 3 3 False True True 4 True True True