繁体   English   中英

如何在不遍历行的情况下丢弃 Pandas 数据框中的异常值?

[英]How to throw out outliers in a pandas dataframe without iterating over rows?

我在XY列中有一个带有数值的数据框数据 我试图在 python 代码中复制的过程如下:

  • 假设Y中的值可以近似为X中值的函数,形式为Y_i = a ln(X_i) + b ,其中ab是一些系数。 找到这些系数ab
  • 丢弃/忽略Y列中偏离该曲线超过d 个单位的值,即如果某些Y_i使得Y_i > a ln(X_i) + b + dY_i < a ln(X_i) + b - d那么我们忽略它。
  • 再次用相同形式的曲线近似剩余数据并找到新系数ab

到目前为止,我有类似的东西

import pandas as pd
import numpy as np
from scipy.optimize import curve_fit

data = pd.read_excel("filename.xlsm")

def func(s, a, b):
    return a * np.log(s) + b

popt, pcov = curve_fit(func, data['X'], data['Y'])
a, b = popt

这个答案说应该尽可能避免迭代行,那么执行给定过程的正确方法是什么? 谁能告诉我正确的代码?

您将公式直接转换为 Python,然后保留满足条件的行:

mask = np.abs(a * np.log(data['X']) + b - data['Y']) < d
new_data = data[mask]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM