I have created a Pandas DataFrame
df = DataFrame(index=['A','B','C'], columns=['x','y'])
Now, I would like to assign a value to particular cell, for example to row C
and column x
. In other words, I would like to perform the following transformation:
x y x y
A NaN NaN A NaN NaN
B NaN NaN ⟶ B NaN NaN
C NaN NaN C 10 NaN
with this code:
df.xs('C')['x'] = 10
However, the contents of df
has not changed. The dataframe contains yet again only NaN
s. How do I what I want?
Best Answer
RukTech's answer,
df.set_value('C', 'x', 10)
, is far and away faster than the options I've suggested below. However, it has been slated for deprecation.Going forward, the recommended method is
.iat/.at
.Why
df.xs('C')['x']=10
does not work:df.xs('C')
by default, returns a new dataframe with a copy of the data, somodifies this new dataframe only.
df['x']
returns a view of thedf
dataframe, somodifies
df
itself.Warning: It is sometimes difficult to predict if an operation returns a copy or a view. For this reason the docs recommend avoiding assignments with "chained indexing".
So the recommended alternative is
which does modify
df
.