总结了数据清洗常见的插值方法

数据清洗是做数据分析的第一步,总结了数据清洗常见的插值方法

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressor
from sklearn.neural_network import MLPRegressor

# 创建一个包含20行20列的示例数据表,初始值为随机数
np.random.seed(42)
data = pd.DataFrame(np.random.rand(20, 20))

# 随机将100个数据设为缺失值
missing_indices = np.random.choice(range(20*20), size=100, replace=False)
for idx in missing_indices:
    row_idx = idx // 20
    col_idx = idx % 20
    data.iloc[row_idx, col_idx] = np.nan

# 打印数据表的前几行以查看结果
print("原始数据表:")
print(data.head())

# 1. 使用均值填充缺失值
data_mean_filled = data.fillna(data.mean())

# 2. 使用中位数填充缺失值
data_median_filled = data.fillna(data.median())

# 4. 使用前一个非缺失值填充缺失值(前向填充)
data_ffill_filled = data.fillna(method='ffill')

# 5. 使用后一个非缺失值填充缺失值(后向填充)
data_bfill_filled = data.fillna(method='bfill')

# 6. 使用固定值填充缺失值
fixed_value = 0
data_fixed_filled = data.fillna(fixed_value)

# 7. 使用插值方法填充缺失值(线性插值)
data_linear_interpolation = data.interpolate()

# 8. 使用随机数填充缺失值
data_random_filled = data.apply(lambda col: col.fillna(np.random.rand()))

# 9. 使用众数(出现频率最高的值)填充缺失值
data_mode_filled = data.fillna(data.mode().iloc[0]) 

# 10. 使用列均值填充对应列的缺失值
data_column_mean_filled = data.copy()
for col in data.columns:
    data_column_mean_filled[col].fillna(data[col].mean(), inplace=True)

# 11. 使用行均值填充对应行的缺失值
data_row_mean_filled = data.copy()
for row in data.index:
    data_row_mean_filled.loc[row].fillna(data.loc[row].mean(), inplace=True)

# 12. 使用前向后向填充的平均值
data_mean_fill = data.fillna(method='ffill').fillna(method='bfill')

# 13. 使用随机行填充
random_row = data.apply(lambda row: row.dropna().sample(len(row), replace=True).values, axis=1)
data_random_row_filled = data.apply(lambda col: col.fillna(np.random.choice(random_row)))

# 14. 使用列最大值填充对应列的缺失值
data_column_max_filled = data.copy()
for col in data.columns:
    data_column_max_filled[col].fillna(data[col].max(), inplace=True)

# 17. 使用行最大值填充对应行的缺失值
data_row_max_filled = data.copy()
for row in data.index:
    data_row_max_filled.loc[row].fillna(data.loc[row].max(), inplace=True)

# 18. 使用前一个非缺失值填充,但限制填充范围
data_ffill_limited_filled = data.copy()
for col in data.columns:
    data_ffill_limited_filled[col].fillna(method='ffill', limit=3, inplace=True)

# 19. 使用后一个非缺失值填充,但限制填充范围
data_bfill_limited_filled = data.copy()
for col in data.columns:
    data_bfill_limited_filled[col].fillna(method='bfill', limit=2, inplace=True)

# 20. 使用特定列的均值填充对应列的缺失值
specific_columns = ['列1', '列2', '列3']  # 替换为实际列名
data_specific_columns_mean_filled = data.copy()
for col in specific_columns:

# 21. 使用指定列的中位数填充对应列的缺失值
specific_columns_median = ['列1', '列2', '列3']  # 替换为实际列名
data_specific_columns_median_filled = data.copy()
for col in specific_columns_median:
    data_specific_columns_median_filled[col].fillna(data[col].median(), inplace=True)

# 22. 使用指定行的均值填充对应行的缺失值
specific_rows = [0, 5, 10]  # 替换为实际行索引
data_specific_rows_mean_filled = data.copy()
for row in specific_rows:
    data_specific_rows_mean_filled.loc[row].fillna(data.loc[row].mean(), inplace=True)

# 23. 使用前一个非缺失值填充,但限制填充范围(针对特定列)
specific_column_ffill_limited_filled = data.copy()
for col in specific_columns:
    specific_column_ffill_limited_filled[col].fillna(method='ffill', limit=3, inplace=True)

# 24. 使用后一个非缺失值填充,但限制填充范围(针对特定行)
specific_row_bfill_limited_filled = data.copy()
for row in specific_rows:
    specific_row_bfill_limited_filled.loc[row].fillna(method='bfill', limit=2, inplace=True)

# 25. 使用列众数填充对应列的缺失值
data_column_mode_filled = data.copy()
for col in data.columns:
    mode_val = data[col].mode().iloc[0]
    data_column_mode_filled[col].fillna(mode_val, inplace=True)

# 26. 使用行众数填充对应行的缺失值
data_row_mode_filled = data.copy()
for row in data.index:
    mode_val = data.loc[row].mode().iloc[0]
    data_row_mode_filled.loc[row].fillna(mode_val, inplace=True)

# 27. 使用前一个非缺失值填充,但限制填充范围(针对所有列)
all_columns_ffill_limited_filled = data.copy()
for col in data.columns:
    all_columns_ffill_limited_filled[col].fillna(method='ffill', limit=3, inplace=True)

# 28. 使用后一个非缺失值填充,但限制填充范围(针对所有行)
all_rows_bfill_limited_filled = data.copy()
for row in data.index:
    all_rows_bfill_limited_filled.loc[row].fillna(method='bfill', limit=2, inplace=True)

# 29. 使用指定列的众数填充对应列的缺失值
specific_columns_mode = ['列1', '列2', '列3']  # 替换为实际列名
data_specific_columns_mode_filled = data.copy()
for col in specific_columns_mode:
    mode_val = data[col].mode().iloc[0]
    data_specific_columns_mode_filled[col].fillna(mode_val, inplace=True)

# 30. 使用指定行的众数填充对应行的缺失值
specific_rows_mode = [0, 5, 10]  # 替换为实际行索引
data_specific_rows_mode_filled = data.copy()
for row in specific_rows_mode:
    mode_val = data.loc[row].mode().iloc[0]
    data_specific_rows_mode_filled.loc[row].fillna(mode_val, inplace=True)

# 31. 使用线性回归模型
linear_reg = LinearRegression()
linear_reg.fit(features.dropna(), target.dropna())
predicted_linear_reg = linear_reg.predict(features)

# 32. 使用随机森林回归模型
rf_reg = RandomForestRegressor()
rf_reg.fit(features.dropna(), target.dropna())
predicted_rf_reg = rf_reg.predict(features)

# 33. 使用K最近邻回归模型
knn_reg = KNeighborsRegressor()
knn_reg.fit(features.dropna(), target.dropna())
predicted_knn_reg = knn_reg.predict(features)

# 34. 使用支持向量回归模型
svr_reg = SVR()
svr_reg.fit(features.dropna(), target.dropna())
predicted_svr_reg = svr_reg.predict(features)

# 35. 使用决策树回归模型
dt_reg = DecisionTreeRegressor()
dt_reg.fit(features.dropna(), target.dropna())
predicted_dt_reg = dt_reg.predict(features)

# 36. 使用多层感知器回归模型
mlp_reg = MLPRegressor()
mlp_reg.fit(features.dropna(), target.dropna())
predicted_mlp_reg = mlp_reg.predict(features)
Python中,有几种常用的数据预处理方法可以进行插值,以填充或修复缺失的数据。以下是几种常见插值方法: 1. 线性插值: 线性插值是一种简单的插值方法,通过使用已知数据点之间的线性关系来估计缺失值。在Python中,可以使用`scipy.interpolate`库中的`interp1d`函数来执行线性插值。 ```python from scipy.interpolate import interp1d # 假设有一个包含缺失值的数据数组x和对应的y x = [1, 2, 4, 7, 9] y = [3, None, 6, None, 12] # 创建线性插值函数 f = interp1d(x, y) # 使用插值函数来填充缺失值 interpolated_y = f(x) print(interpolated_y) ``` 2. 最近邻插值: 最近邻插值是一种简单的插值方法,通过使用最接近缺失值的已知数据点来估计缺失值。在Python中,可以使用`scipy.interpolate`库中的`NearestNDInterpolator`类来执行最近邻插值。 ```python from scipy.interpolate import NearestNDInterpolator import numpy as np # 假设有一个包含缺失值的数据数组x和对应的y x = [1, 2, 4, 7, 9] y = [3, None, 6, None, 12] # 创建最近邻插值函数 mask = np.isnan(y) f = NearestNDInterpolator((np.array(x)[~mask],), np.array(y)[~mask]) # 使用插值函数来填充缺失值 interpolated_y = f(x) print(interpolated_y) ``` 3. 插值法(Interpolation): 插值法是一种更复杂的插值方法,通过使用已知数据点的函数关系来估计缺失值。在Python中,可以使用`scipy.interpolate`库中的不同插值方法(如`interp1d`、`interp2d`等)来执行插值。 ```python from scipy.interpolate import interp1d # 假设有一个包含缺失值的数据数组x和对应的y x = [1, 2, 4, 7, 9] y = [3, None, 6, None, 12] # 创建插值函数(使用三次样条插值) f = interp1d(x, y, kind='cubic') # 使用插值函数来填充缺失值 interpolated_y = f(x) print(interpolated_y) ``` 这些是常见的数据预处理方法之一,可以根据具体情况选择合适的插值方法。注意,在进行插值之前,需要对数据进行适当的清洗和处理,以确保数据的准确性和一致性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gatinaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值