Condicional Reemplazar Pandas
Probablemente estoy haciendo algo muy estúpido, pero estoy perplejo.
Tengo un dataframe, y quiero reemplazar los valores en una columna en particular que exceden un valor con cero. Yo había pensado que esta era una manera de lograr esto:
df[df.my_channel > 20000].my_channel = 0
Si copio el canal en un nuevo marco de datos es simple:
df2 = df.my_channel
df2[df2 > 20000] = 0
Esto hace exactamente lo que quiero, pero parece que no funciona con el canal como parte del dataframe original.
3 answers
.ix
indexer funciona bien para pandas versión anterior a 0.20.0, pero desde pandas 0.20.0, el .ix
indexer es obsoleto, por lo que debe evitar usarlo. En su lugar, puede usar .loc
o iloc
indexadores. Usted puede resolver este problema por:
mask = df.my_channel > 20000
column_name = 'my_channel'
df.loc[mask, column_name] = 0
mask
le ayuda a seleccionar las filas en las que df.my_channel > 20000
es True
, mientras que df.loc[mask, column_name] = 0
establece el valor 0 a las filas seleccionadas donde mask
se mantiene en la columna cuyo nombre es column_name
.
Actualización:
En este caso, debe utilizar loc
porque si usas iloc
, obtendrás un NotImplementedError
que te dice que la indexación booleana basada en ilocalización en un tipo entero no está disponible.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-14 16:47:41
Intenta
df.ix[df.my_channel > 20000, 'my_channel'] = 0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-06 19:08:38
Personalmente me gusta usar la función np.where
que funciona de la siguiente manera:
df['X'] = np.where(df['Y']>=50, 'yes', 'no')
En su caso usted querría:
import numpy as np
df['my_channel'] = np.where(df.my_channel > 20000, 0, df.my_channel)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-09 22:27:33