Mais
Definir valor para determinada célula em pandas DataFrame usando índice
I'criei uma Pandas DataFrame
df = DataFrame(index=['A','B','C'], columns=['x','y'])
e consegui isto
x y Um NaN NaN B NaN NaN C NaN NaN
391
3
RukTech's answer,
df.set_value('C', 'x', 10)
, está longe e longe mais rápido do que as opções I've sugeridas abaixo. Entretanto, foi slated for deprecation.Seguindo adiante, o método recomendado é `.iat/.at'.
Porquê
df.xs('C')['x']=10
não funciona:df.xs('C')
por padrão, retorna um novo dataframe com uma cópia dos dados, entãomodifica apenas este novo quadro de dados.
df['x']
retorna uma visão do quadro de dadosdf
, portantomodifica o próprio
df
.**Aviso***: Por vezes é difícil prever se uma operação devolve uma cópia ou uma vista. Por esta razão os docs recomendam evitar atribuições com "indexação em cadeia".
Portanto, a alternativa recomendada é
que faz modificar
df
.Atualização: O método
.set_value' vai ser [depreciado][2].
.iat/.at` são bons substitutos, infelizmente pandas fornece pouca documentaçãoA maneira mais rápida de fazer isso é usando set_value. Este método é ~100 vezes mais rápido do que o método `.ix'. Por exemplo:
df.set_value('C'C', 'x', 10)
A forma recomendada (de acordo com os mantenedores) para definir um valor é:
Utilizando 'chained indexing' (
df['x']['C']
) pode levar a problemas.Veja: