如何使用数据帧使该算法更加高效



我正在尝试获取列的异常值(使用IQR(,一旦获得异常值,我就想将主数据帧中异常值所在的值设置为null,以便在之后对其进行估算。这就是我实现它的方式:

df_outliers_detected = detect_outliers_IQR(df['Outliers'])
df_outliers_detected = pd.DataFrame(df_outliers_detected)
print(df_outliers_detected)
for i in range(len(df)):
for j in range(len df_outliers_detected)):
if(df.loc[i, "Outliers"] ==  df_outliers_detected.iloc[j,0]):
df.loc[i,'Outliers'] = None

print(df['Outliers'].head(100))


这2个for循环使程序非常慢,它们是实现这一点的更好方法吗?

";remove_outliers_IQR":

def detect_outliers_IQR(df):
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1

print(df)
print("n")
df_outlier = df[((df<(Q1-1.5*IQR)) | (df>(Q3+1.5*IQR)))]
print(len(df_outlier))
return df_outlier

您可以利用函数中已经使用的逻辑索引。

def detect_outliers_IQR(df_input):
df = df_input.copy()
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
df_outlier = (df<(Q1-1.5*IQR)) | (df>(Q3+1.5*IQR))
df[df_outlier] = None
return df
# replace outliers
df_outliers_detected = detect_outliers_IQR(df['Outliers'])
print(df_outliers_detected)

最新更新