2024-06-13 20:51:33 发布
网友
我有一个数据帧的名字叫
投标资料:
Supplier_ID shiper_RFQ ---------- 0 2305 5000 1 2309 5200 2 2305 6500 3 2307 4500 4 2301 900 5 2302 10000 6 2306 4500
我想从shipper\u RFQ中删除离群值行,并将它们存储在另一个数据帧中。我尝试在列表中转换shipper\u RFQ,然后找到异常值,但效果不好。你知道吗
如果你有好的数据,那么就用threshold = 0.5
threshold = 0.5
threshold = 1 print(df[df['shiper_RFQ'].apply(lambda x: np.abs(x - df['shiper_RFQ'].mean()) / df['shiper_RFQ'].std() < threshold)])
还有这个
df = df[ np.abs(df['shiper_RFQ'] - df['shiper_RFQ'].mean()) / df['shiper_RFQ'].std() < threshold]
两者的结果相同
输出
Supplier_ID shiper_RFQ 0 2305 5000 1 2309 5200 2 2305 6500 3 2307 4500 6 2306 4500
如果你打印你可以看到异常
print(df['shiper_RFQ'].apply(lambda x: np.abs(x - df['shiper_RFQ'].mean()) / df['shiper_RFQ'].std())) 0 0.084182 1 0.010523 2 0.468261 3 0.268329 4 1.594192 5 1.757294 6 0.268329
您可以通过查找与平均列值相差超过1.5个标准差(或您选择的任何其他截止值)的行来识别异常值:
df['outliers'] = 0 df.loc[(df.shiper_RFQ - df.shiper_RFQ.mean()).abs() > 1.5*df.shiper_RFQ.std(), 'outliers'] = 1 print(df)
Supplier_ID shiper_RFQ outliers 0 2305 5000 0 1 2309 5200 0 2 2305 6500 0 3 2307 4500 0 4 2301 900 1 5 2302 10000 1 6 2306 4500 0
然后可以将它们存储在另一个数据帧中,并从原始数据帧中删除它们:
df2 = df[df.outliers == 1].reset_index(drop=True) df = df[df.outliers == 0].reset_index(drop=True) print(df2) print(df)
Supplier_ID shiper_RFQ outliers 0 2301 900 1 1 2302 10000 1 Supplier_ID shiper_RFQ outliers 0 2305 5000 0 1 2309 5200 0 2 2305 6500 0 3 2307 4500 0 4 2306 4500 0
如果你有好的数据,那么就用
threshold = 0.5
还有这个
两者的结果相同
输出
如果你打印你可以看到异常
您可以通过查找与平均列值相差超过1.5个标准差(或您选择的任何其他截止值)的行来识别异常值:
然后可以将它们存储在另一个数据帧中,并从原始数据帧中删除它们:
相关问题 更多 >
编程相关推荐