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