如何根据条件在熊猫数据框中的任何位置替换值?

杜尔巴希特

关于替换某些行或列或特定值有很多问题,但是我没有找到我想要的东西。想像一下这样的数据框,

          a         b         c         d
a  0.354511  0.416929  0.704512  0.598345
b  0.948605  0.473364  0.154856  0.637639
c  0.250829  0.130928  0.682998  0.056049
d  0.504516  0.880731  0.216192  0.314724

现在,我想将基于条件的所有值替换为其他值(无论它们位于哪一列或哪一行)。假设我想将所有<0.5的值替换为np.nan我尝试了几件事,但没有任何效果(即,什么也没发生,数据帧保持不变)。

此处的示例代码:

frame = pd.DataFrame(np.random.rand(4,4),index=['a','b','c','d'], columns=['a','b','c','d'])
print frame
for row,col in enumerate(frame):
    frame.replace(frame.ix[row,col]<0.5,np.nan,inplace=True)
print frame

要么

for row,col in enumerate(frame):
    if frame.ix[row,col]<=0.5:
        M.ix[row,col]=np.nan
print M

不过最终,

          a         b         c         d
a  0.600701  0.823570  0.159012  0.615898
b  0.234855  0.086080  0.950064  0.982248
c  0.440625  0.960078  0.191975  0.598865
d  0.127866  0.537867  0.434326  0.507635
          a         b         c         d
a  0.600701  0.823570  0.159012  0.615898
b  0.234855  0.086080  0.950064  0.982248
c  0.440625  0.960078  0.191975  0.598865
d  0.127866  0.537867  0.434326  0.507635

-它们是相同的,没有NaN而不是较小的值。哪里有问题?

海盗

pandas做到这一点方法是wheremask

where将数据框值保留在条件为的位置True
。可选的第二个参数是要替换为的值

frame.where(frame < .5, -9)

          a         b         c         d
a  0.354511  0.416929 -9.000000 -9.000000
b -9.000000  0.473364  0.154856 -9.000000
c  0.250829  0.130928 -9.000000  0.056049
d -9.000000 -9.000000  0.216192  0.314724

或姐妹方法

mask将数据框值保留在条件为的位置False
。可选的第二个参数是要替换为的值

frame.mask(frame < .5, -9)

          a         b         c         d
a -9.000000 -9.000000  0.704512  0.598345
b  0.948605 -9.000000 -9.000000  0.637639
c -9.000000 -9.000000  0.682998 -9.000000
d  0.504516  0.880731 -9.000000 -9.000000

numpy.where
我们可以用到numpy非常相似的效果

pd.DataFrame(
    np.where(frame < .5, df, -9),
    frame.index, frame.columns)

          a         b         c         d
a  0.354511  0.416929 -9.000000 -9.000000
b -9.000000  0.473364  0.154856 -9.000000
c  0.250829  0.130928 -9.000000  0.056049
d -9.000000 -9.000000  0.216192  0.314724

天真的时间测试

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据条件替换熊猫数据框中的值?

根据多种条件替换熊猫数据框中的值

根据条件替换熊猫数据框列中的值

熊猫根据条件替换数据框值

如何根据条件用列名替换熊猫数据框中的值?

如何根据“标识符列”和熊猫数据框中的附加条件替换值?

如何根据函数替换熊猫数据框中的值

根据条件在熊猫数据框中添加新列,并替换不同列中的Nan值

熊猫:根据条件将数据框中的值替换为另一个数据框中的值

如何替换熊猫数据框中的值?

替换熊猫数据框中任何列中的值

如何根据共享列值替换熊猫数据框中的值?

如何根据条件替换熊猫数据框列中的单元格

如何根据熊猫数据框数据透视表中的条件获取列中的值?

根据条件在熊猫数据框中的多行中设置值

如何根据另一个数据框中的查找值替换熊猫数据框值?

如何根据条件对熊猫数据框的行值进行排序?

如何根据条件在熊猫数据框的多列上分配值

根据熊猫数据框中的条件为列分配值

熊猫数据框根据条件更改列中的值

根据条件屏蔽熊猫数据框中的值

如何根据熊猫数据框中的条件移动列中的值

如何根据索引位置标准化熊猫数据框中的值?

如何根据条件用NaN替换数据框列值?

根据条件语句(“ if”)替换数据框中的值

根据条件替换数据框列中的值

根据条件语句替换数据框中的值

根据条件替换数据框的列中的多个值

Pandas 数据框根据条件替换列中的值