我创建了一个 Pandas DataFrame
df = DataFrame(index=['A','B','C'], columns=['x','y'])
现在,我想为特定单元格分配一个值,例如行C
和列x
。换句话说,我想执行以下转换:
x y x y
A NaN NaN A NaN NaN
B NaN NaN ⟶ B NaN NaN
C NaN NaN C 10 NaN
用这个代码:
df.xs('C')['x'] = 10
然而,内容df
没有改变。数据框再次仅包含NaN
s。我怎样才能得到我想要的?
鲁克科技的回答, df.set_value('C', 'x', 10)
,远远快于我在下面建议的选项。然而,已经预计弃用.
展望未来,推荐的方法是.iat/.at.
Why df.xs('C')['x']=10
不起作用:
df.xs('C')
默认情况下,返回一个新的数据框有副本的数据,所以
df.xs('C')['x']=10
仅修改这个新数据框。
df['x']
返回一个视图df
数据框,所以
df['x']['C'] = 10
修改df
itself.
Warning:有时很难预测操作是否返回副本或视图。为此文档建议避免使用“链式索引”进行分配.
所以推荐的替代方案是
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)