如何用Pandas的mask移除数据集指定列0值行及对应Energy元素?
解决方法
你已经生成了判断0值的mask,接下来只需要用布尔索引过滤掉mask为True的行,就能得到对应列非0值的条目,以及匹配的Energy元素。可以用一个字典来存储每一列的结果,方便后续调用:
# 创建字典存储每一列的结果(非0列数据 + 对应Energy) column_results = {} for column in depo_dataset.columns[1:]: # 生成当前列非0的掩码(~表示取反,即保留非0的行) mask = depo_dataset[column] != 0 # 过滤得到非0的列数据和对应的Energy filtered_col = depo_dataset[column][mask] filtered_energy = depo_dataset['Energy'][mask] # 存入字典,键为列名,值为(过滤后的列数据, 过滤后的Energy) column_results[column] = (filtered_col, filtered_energy)
用你给出的例子测试:
- 原
depo_dataset['0.0']为[0.4, 0.0, 0.4, 0.1],Energy为[0.82, 0.85, 0.87, 0.90] - 过滤后
filtered_col会是[0.4, 0.4, 0.1],filtered_energy会是[0.82, 0.87, 0.90],正好去掉了0值和对应的Energy元素。
如果需要把结果转为数组(比如numpy数组),可以在过滤后加.values或者.to_numpy():
filtered_col_array = filtered_col.to_numpy() filtered_energy_array = filtered_energy.to_numpy()
另外要注意:如果你的数据里是近似0的浮点数(比如0.0000001),直接用==0或!=0可能不准确,建议用绝对值判断:
import numpy as np mask = np.abs(depo_dataset[column]) > 1e-9 # 阈值可根据数据精度调整
内容的提问来源于stack exchange,提问作者IGY
相关产品推荐
相关产品推荐

