小编典典

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

all

我创建了一个熊猫数据框

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

并得到了这个

    x    y
A  NaN  NaN
B  NaN  NaN
C  NaN  NaN

现在,我想为特定单元格分配一个值,例如 rowC和 column x。我希望得到这个结果:

    x    y
A  NaN  NaN
B  NaN  NaN
C  10  NaN

使用此代码:

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

但是,内容df并没有改变。数据框再次仅包含NaNs。

有什么建议?


阅读 134

收藏
2022-03-03

共1个答案

小编典典

df.set_value('C','x', 10)远远快于我在下面建议的选项。但是,它已被 弃用

展望未来,推荐的方法是.iat/.at.


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

df.xs('C')默认情况下,返回一个带有数据副本的新数据框,所以

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

仅修改此新数据框。

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

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

修改df自己。

警告 :有时很难预测操作是否返回副本或视图。出于这个原因,文档建议避免使用 “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
2022-03-03