关于替换某些行或列或特定值有很多问题,但是我没有找到我想要的东西。想像一下这样的数据框,
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而不是较小的值。哪里有问题?
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] 删除。
我来说两句