python - Establecer valores en una copia de un segmento de un DataFrame
pandas (1)
Esta advertencia viene porque su dataframe
x
es una copia de un segmento.
No es fácil saber por qué, pero tiene algo que ver con cómo ha llegado al estado actual.
Puede crear un
dataframe
adecuado a partir de x haciendo
x = x.copy()
Esto eliminará la advertencia, pero no es la forma correcta
Debería utilizar el método
DataFrame.loc
, como sugiere la advertencia, de esta manera:
x.loc[:,''Mass32s''] = pandas.rolling_mean(x.Mass32, 5).shift(-2)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo lidiar con SettingWithCopyWarning en Pandas? 13 respuestas
Tengo un pequeño marco de datos, digamos este:
Mass32 Mass44
12 0.576703 0.496159
13 0.576658 0.495832
14 0.576703 0.495398
15 0.576587 0.494786
16 0.576616 0.494473
...
Me gustaría tener una media
Mass32
de la columna
Mass32
, así que hago esto:
x[''Mass32s''] = pandas.rolling_mean(x.Mass32, 5).shift(-2)
Funciona ya que tengo una nueva columna llamada
Mass32s
que contiene lo que espero que contenga, pero también recibo el mensaje de advertencia:
Se está intentando establecer un valor en una copia de un segmento de un DataFrame. Intente usar .loc [row_indexer, col_indexer] = value en su lugar
Consulte las advertencias en la documentación: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
Me pregunto si hay una mejor manera de hacerlo, especialmente para evitar recibir este mensaje de advertencia.