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


我创建了一个熊猫DataFrame

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

并得到这个

    x    y
A  NaN  NaN
B  NaN  NaN
C  NaN  NaN


然后,我想为特定的单元格赋值,例如行'C'和列'x'。 我期望得到这样的结果:

    x    y
A  NaN  NaN
B  NaN  NaN
C  10  NaN

与此代码:

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

但df的内容没有改变。 在数据框中,它只是楠。

有什么建议么?


RukTech的答案是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本身。

警告 :有时很难预测操作是否返回副本或视图。 为此,文档建议避免使用“链接索引”进行分配。


所以推荐的选择是

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

更新:.set_value方法将被弃用。 .iat / .at是很好的替代品,不幸的是熊猫提供的文档很少


最快的方法是使用set_value。 这种方法比.ix方法快100倍。 例如:

df.set_value('C', 'x', 10)


您也可以使用.loc进行条件查找,如下所示:

df.loc[df[<some_column_name>] == <condition>, <another_column_name>] = <value_to_add>

其中<some_column_name是要检查<condition>变量的列,而<another_column_name>是要添加到的列(可以是新列或已存在的列)。 <value_to_add>是要添加到该列/行的值。

这个例子并不适用于手头的问题,但对于有人希望根据条件添加特定值可能会有用。

链接地址: http://www.djcxy.com/p/70923.html

上一篇: Set value for particular cell in pandas DataFrame using index

下一篇: Creating an empty Pandas DataFrame, then filling it?