print name iloc example columns column and python pandas warnings chained-assignment

name - python pandas select rows



Pandas SettingWithCopyWarning (2)

Python 3.4 y Pandas 0.15.0

df es un marco de datos y col1 es una columna. Con el código a continuación, estoy verificando la presencia del valor 10 y reemplazando dichos valores con 1000.

df.col1[df.col1 == 10] = 1000

Aquí hay otro ejemplo. Esta vez, estoy cambiando los valores en col2 según el índice.

df.col2[df.index == 151] = 500

Ambos producen la siguiente advertencia:

-c:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

Finalmente,

cols = [''col1'', ''col2'', ''col3''] df[cols] = df[cols].applymap(some_function)

Esto produce una advertencia similar, con una sugerencia adicional:

Try using .loc[row_indexer,col_indexer] = value instead

No estoy seguro de entender la discusión señalada en las advertencias. ¿Cuál sería una mejor manera de escribir estas tres líneas de código?

Tenga en cuenta que las operaciones funcionaron.


De acuerdo con Paul sobre el uso de ''loc''.

Para su caso applymap debería poder hacer esto:

cols = [''col1'', ''col2'', ''col3''] df.loc[:, cols] = df[cols].applymap(some_function)


El problema aquí es que: df.col1[df.col1 == 10] devuelve una copia.

Entonces yo diría:

row_index = df.col1 == 10 # then with the form .loc[row_indexer,col_indexer] df.loc[row_index, ''col1''] = 100