如何将pd.DataFrame负值加256转正且保留正值?
解决Pandas DataFrame中仅对负值加256且保留正值的问题
问题场景
原始DataFrame:
import pandas as pd dfx = pd.DataFrame({'red': [72], 'green': [101], 'blue': [-125]})
输出:
red green blue 0 72 101 -125
使用dfx = dfx[dfx < 0] + 256后,正值被替换为NaN,不符合需求:
red green blue 0 NaN NaN 131
需要实现:仅对负值加256转为正值,同时保留原有正值不变,期望输出:
red green blue 0 72 101 131
错误原因
原代码通过布尔索引筛选出负值并加256,但未被筛选的位置会被赋值为NaN,直接覆盖整个DataFrame导致正值丢失。
解决方案
以下三种方法均可实现需求:
方法1:使用numpy.where(高效简洁)
import numpy as np dfx = dfx.apply(lambda col: np.where(col < 0, col + 256, col))
对每一列元素判断:小于0则加256,否则保留原值。
方法2:使用Pandas内置mask方法(贴合Pandas风格)
dfx = dfx.mask(dfx < 0, dfx + 256)
mask方法会将满足条件(元素<0)的位置替换为对应计算后的值,不满足条件的元素保持不变。
方法3:使用applymap逐元素处理(直观易懂)
dfx = dfx.applymap(lambda x: x + 256 if x < 0 else x)
遍历DataFrame中每一个元素,根据条件直接处理。
内容的提问来源于stack exchange,提问作者lingyau lee
相关产品推荐
相关产品推荐

