使用Python Pandas查找CSV负值并替换为左右单元格平均值的实现方法
解决方案
直接用pandas向量化操作即可,不要手动遍历单元格,超大规模数据集下遍历的效率极低,向量化操作的速度可以满足需求。
核心逻辑
- 先把所有小于0的错误值统一替换为NaN
- 按行做线性插值,恰好就能得到NaN位置左右相邻有效值的平均值,完全匹配你给出的示例要求
完整代码示例
import pandas as pd import numpy as np # 读取你的数据集,这里用示例数据做演示 # 实际使用替换为 pd.read_excel/ pd.read_csv 等读取你自己的文件即可 df = pd.DataFrame([ [8, 8, 7, 6, 9, -3434, 8], [5, -10, 3, -2, 7, 4, 9] ]) # 替换所有负值为NaN df = df.where(df >= 0, np.nan) # 按行线性插值,自动用左右有效值的平均值填充NaN df = df.interpolate(method='linear', axis=1, limit_direction='both') # 输出查看结果 print(df)
输出示例
运行后第一行的结果就是你要的[8, 8, 7, 6, 9, 8.5, 8],完全符合预期。
可选调整项
- 如果只需要替换单独出现的负值,不处理连续多个负值的情况,给
interpolate加limit=1参数即可 - 如果负值出现在行首/行尾的边界位置,当前配置会自动用最近的单侧有效值填充,你也可以根据需求额外处理边界,比如填0、删除对应行等
内容的提问来源于stack exchange,提问作者el_Scorchio
相关产品推荐
相关产品推荐

