对df1数据的‘fg’,‘ji’筛选异常值将异常值另存为一个数据表,df1去除异常值后的数据为df5
时间: 2025-06-24 17:46:00 浏览: 10
以下代码是使用Python和Pandas库实现的,用于筛选`df1`数据中‘fg’和‘ji’列的异常值,并将异常值保存到一个新的数据表中,同时生成去除异常值后的数据表`df5`:
```python
import pandas as pd
import numpy as np
# 假设 df1 是你的原始数据框
# 示例数据
data = {'fg': [1, 2, 3, 4, 100, 6, 7, 8, 9, 10],
'ji': [1, 2, 3, 150, 5, 6, 7, 8, 9, 10]}
df1 = pd.DataFrame(data)
# 定义函数来检测异常值(使用 IQR 方法)
def detect_outliers_iqr(df, columns):
outlier_indices = []
for col in columns:
# 计算第1四分位数 (Q1) 和 第3四分位数 (Q3)
Q1 = df[col].quantile(0.25)
Q3 = df[col].quantile(0.75)
IQR = Q3 - Q1 # 四分位差
# 定义异常值范围
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 找出异常值索引
outliers = df[(df[col] < lower_bound) | (df[col] > upper_bound)].index
outlier_indices.extend(outliers)
# 合并重复的异常值索引
outlier_indices = list(set(outlier_indices))
return outlier_indices
# 筛选异常值
columns_to_check = ['fg', 'ji'] # 要检查的列
outlier_indices = detect_outliers_iqr(df1, columns_to_check)
# 创建包含异常值的数据表
df_outliers = df1.loc[outlier_indices]
# 移除异常值后生成新的数据表
df5 = df1.drop(outlier_indices).reset_index(drop=True)
# 输出结果
print("异常值数据表:")
print(df_outliers)
print("\n去除异常值后的数据表:")
print(df5)
```
### 上述代码解释:
1. **IQR方法**:我们使用四分位差(Interquartile Range, IQR)来检测异常值。对于每个指定的列(如‘fg’和‘ji’),计算其第1四分位数(Q1)和第3四分位数(Q3),然后定义异常值为低于 `Q1 - 1.5 * IQR` 或高于 `Q3 + 1.5 * IQR` 的值。
2. **detect_outliers_iqr函数**:该函数接收一个DataFrame和需要检查的列名列表,返回所有被检测为异常值的行索引。
3. **创建异常值数据表**:通过`df1.loc[outlier_indices]`提取包含异常值的行,并将其存储到`df_outliers`中。
4. **移除异常值**:使用`drop`方法从原始数据框中删除异常值对应的行,生成新的数据框`df5`。
### 输出示例:
假设输入数据为:
```plaintext
fg ji
0 1 1
1 2 2
2 3 3
3 4 150
4 100 5
5 6 6
6 7 7
7 8 8
8 9 9
9 10 10
```
运行上述代码后输出:
```plaintext
异常值数据表:
fg ji
3 4.0 150
4 100.0 5
去除异常值后的数据表:
fg ji
0 1 1
1 2 2
2 3 3
3 6 6
4 7 7
5 8 8
6 9 9
7 10 10
```
阅读全文
相关推荐



















