Set value for particular cell in pandas DataFrame using index

后端 未结 20 1571
野趣味
野趣味 2020-11-22 05:45

I\'ve created a Pandas DataFrame

df = DataFrame(index=[\'A\',\'B\',\'C\'], columns=[\'x\',\'y\'])

and got this

    x    y
A  NaN         


        
20条回答
  •  旧巷少年郎
    2020-11-22 06:26

    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
    

提交回复
热议问题