Python 如何根据条件替换数据帧中任意位置的值?

Python 如何根据条件替换数据帧中任意位置的值?,python,pandas,Python,Pandas,关于替换某些行、列或特定值有很多问题,但我还没有找到我要查找的内容。 想象一下这样的数据帧 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.3

关于替换某些行、列或特定值有很多问题,但我还没有找到我要查找的内容。 想象一下这样的数据帧

          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
现在我想用其他内容替换所有基于条件的值(无论它们位于哪一列或哪一行)。假设我想用
np.nan
替换所有<0.5的值。 我尝试了几件事情,但都没有成功(即,没有发生任何事情,数据帧保持不变)

此处的示例代码:

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

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

啊,我明白了。我想出来了。也许不是最优雅的解决方案,但它是有效的。使用numpy数组时,元素操作可能更容易,因此我将帧转换为numpy数组,更改内容,然后将其转换回dataframe。这很简单:

frame = np.asarray(frame)
frame[frame<0.5] = np.nan
frame = pd.DataFrame(frame,index=['a','b','c','d'], columns=['a','b','c','d'])

很抱歉提前向您发送垃圾邮件。但是我会把它放在这里,以防有人有同样的问题。

实现这一点的
pandas
方法是

其中
在条件为
真时保留数据帧值

可选的第二个参数是要替换为的值


我们可以使用
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
pd.DataFrame(
np.式中(帧<.5,df,-9),
frame.index,frame.columns)
a、b、c、d
a 0.354511 0.416929-9.000000-9.000000
b-9.0000000.473364 0.154856-9.000000
c 0.250829 0.130928-9.0000000.056049
d-9.000000-9.0000000.216192 0.314724

原始时间测试

frame = np.asarray(frame)
frame[frame<0.5] = np.nan
frame = pd.DataFrame(frame,index=['a','b','c','d'], columns=['a','b','c','d'])
          a         b         c         d
a  0.791982  0.654760  0.854503  0.552131
b  0.545564       NaN  0.966512       NaN
c  0.595927  0.540071  0.938315       NaN
d       NaN  0.844594       NaN       NaN
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
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
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