python - index - pandas dataframe tutorial
Python: Pandas Dataframe cómo multiplicar una columna completa con un escalar (6)
Aquí está la respuesta después de un poco de investigación:
df.loc[:,''quantity''] *= -1 #seems to prevent SettingWithCopyWarning
¿Cómo multiplico cada elemento de una columna dada de mi marco de datos con un escalar? (He intentado buscar SO, pero parece que no puedo encontrar la solución correcta)
Haciendo algo como:
df[''quantity''] *= -1 # trying to multiply each row''s quantity column with -1
me da una advertencia:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
Nota: si es posible, no quiero estar iterando sobre el marco de datos y hacer algo como esto ... ya que creo que cualquier operación matemática estándar en una columna completa debería ser posible sin tener que escribir un bucle:
for idx, row in df.iterrows():
df.loc[idx, ''quantity''] *= -1
EDITAR :
Estoy corriendo 0.16.2
de Pandas
traza completa:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
self.obj[item] = s
Nota: para aquellos que usan pandas 0.20.3 y superiores, y están buscando una respuesta, todas estas opciones funcionarán:
df = pd.DataFrame(np.ones((5,6)),columns=[''one'',''two'',''three'',
''four'',''five'',''six''])
df.one *=5
df.two = df.two*5
df.three = df.three.multiply(5)
df[''four''] = df[''four'']*5
df.loc[:, ''five''] *=5
df.iloc[:, 5] = df.iloc[:, 5]*5
lo que resulta en
one two three four five six
0 5.0 5.0 5.0 5.0 5.0 5.0
1 5.0 5.0 5.0 5.0 5.0 5.0
2 5.0 5.0 5.0 5.0 5.0 5.0
3 5.0 5.0 5.0 5.0 5.0 5.0
4 5.0 5.0 5.0 5.0 5.0 5.0
Pruebe df[''quantity''] = df[''quantity''] * -1
.
Tengo esta advertencia utilizando Pandas 0.22. Puedes evitar esto siendo muy explícito usando el método de assign :
df = df.assign(quantity = df.quantity.mul(-1))
Un poco viejo, pero todavía estaba recibiendo el mismo SettingWithCopyWarning. Aquí estaba mi solución:
df.loc[:, ''quantity''] = df[''quantity''] * -1
intente utilizar la función de aplicación.
df[''quantity''] = df[''quantity''].apply(lambda x: x*-1)