HiveBrain v1.2.0
Get Started
← Back to all entries
patternpythonCriticalCanonical

Set value for particular cell in pandas DataFrame using index

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
indexsetdataframeforusingpandascellvalueparticular

Problem

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?

Solution

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, so

df.xs('C')['x']=10


modifies this new dataframe only.

df['x'] returns a view of the df dataframe, so

df['x']['C'] = 10


modifies 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

df.at['C', 'x'] = 10


which does modify df.

In [18]: %timeit df.set_value('C', 'x', 10)
100000 loops, best of 3: 2.9 µs per loop

In [20]: %timeit df['x']['C'] = 10
100000 loops, best of 3: 6.31 µs per loop

In [81]: %timeit df.at['C', 'x'] = 10
100000 loops, best of 3: 9.2 µs per loop

Code Snippets

df.xs('C')['x']=10
df['x']['C'] = 10
df.at['C', 'x'] = 10
In [18]: %timeit df.set_value('C', 'x', 10)
100000 loops, best of 3: 2.9 µs per loop

In [20]: %timeit df['x']['C'] = 10
100000 loops, best of 3: 6.31 µs per loop

In [81]: %timeit df.at['C', 'x'] = 10
100000 loops, best of 3: 9.2 µs per loop

Context

Stack Overflow Q#13842088, score: 955

Revisions (0)

No revisions yet.