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 NaNs. How do I what I want?
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']=10does 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 thedfdataframe, somodifies
dfitself.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.