使用索引为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