使用索引为pandas数据帧中的特定单元格设置值

  • 问题:
  • 我创建了一个Pandas数据帧

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

    得到了这个


    x y
    A NaN NaN
    B NaN NaN
    C NaN NaN


    x y
    A NaN NaN
    B NaN NaN
    C 10 NaN

    使用此代码:

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

    但是df的内容没有改变。同样,在DataFrame中也只有NaNs。在

    有什么建议吗?在

  • 答案:
  • RukTech’s answerDataframe设定值('C','x',10),远远快于我在下面建议的选项。但是,它已经计划弃用

    向前看recommended method is .iat/.at

    为什么Dataframe.xs('C')['x']=10不起作用:

    <代码>Dataframe.xs默认情况下,(’C’)返回一个新的数据帧with a copy所以

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

    仅修改此新数据帧

    df['x']返回df数据帧的视图,因此

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

    修改df本身

    警告:有时很难预测操作是否返回副本或视图。因此docs recommend avoiding assignments with “chained indexing”. 在

    所以推荐的替代方案是

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

    哪个做了修改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