微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 根据pandas 0.16中的条件更新列

我正在尝试根据另一列的条件更新列

df=pd.DataFrame(np.random.randn(6,4),columns=list('abcd'))
df[df.b>0].d=1

为什么这不起作用?没有条件它的工作原理.

解决方法:

当我用pandas v0.16.1执行此操作时,我会收到警告,告诉我发生了什么:

df=pd.DataFrame(np.random.randn(6,4),columns=list('abcd'))
df[df.b>0].d=1
/home/me/.local/lib/python2.7/site-packages/pandas/core/generic.py:1974: SettingWithcopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

df [df.b> 0]创建不再链接到原始数据帧的数据帧的那些行的副本.根据警告中的建议,如果我这样做:

df.loc[df.b > 0, 'd'] = 1

我得到了预期的结果:

df
Out[10]: 
          a         b         c         d
0 -0.127010  0.252527 -0.857680  1.000000
1  0.348888  0.780728 -0.710778  1.000000
2  0.840746 -0.456552  0.414482 -1.326191
3  0.864530  0.365728 -0.540530  1.000000
4  1.954639 -0.919998 -0.446927  1.949182
5 -0.928344 -0.145271  0.089434 -0.569934

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐