
# import matplotlib.pyplot as plt
# from matplotlib import rcParams
# plt.rcParams['xtick.direction'] = 'in'
# plt.rcParams['ytick.direction'] = 'in'
# plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
# plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
# config = {
#             "font.family": 'serif',
#             "font.size": 20,
#             "mathtext.fontset": 'stix',
#             "font.serif": ['Times New Roman'],#宋体
#             'axes.unicode_minus': False # 处理负号
#          }
# rcParams.update(config)


#补全1--平均值填充
import numpy as np
import pandas as pd

# 读取数据集
# df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-无time.csv', header=None)
df = pd.read_csv(r'D:\验收材料\空工大-装备性能退化评估和故障预测健康管理软件\里程碑最终算法\数据缺失-time.csv', header=None)

# 检查是否存在时间列
if 'Time' in df.columns:
    # 提取时间列并转换为 datetime 类型
    df['Time'] = pd.to_datetime(df['Time'], errors='coerce')

    # 对时间列进行排序，确保时间顺序
    df.sort_values('Time', inplace=True)

    # 使用 interpolate 方法进行线性插值填充缺失的时间值
    df['Time'] = df['Time'].interpolate(method='time')

    # 如果时间列经过填充后，需要重新排序以保持原有的顺序（如果需要的话）
    # df.sort_index(inplace=True)

# 分离数值型数据
numerical_cols = df.select_dtypes(include=[np.number]).columns

# 填充数值型数据的缺失值，使用均值填充
for col in numerical_cols:
    df[col].fillna(df[col].mean(), inplace=True)

# 分离分类型数据
categorical_cols = df.select_dtypes(include=['object']).columns

# 填充分类型数据的缺失值，使用平均值填充
for col in categorical_cols:
    df[col].fillna(df[col].mode()[0], inplace=True)

# 将结果保存为CSV文件
df.to_csv('补全后的数据.csv', index=False, header=False)

# # # #补全2--中位数填充
# # import numpy as np
# # import pandas as pd
# #
# # # 读取数据集
# # # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-无time.csv', header=None)
# # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-time.csv', header=None)
# #
# # # 检查是否存在时间列
# # if 'Time' in df.columns:
# #     # 提取时间列并转换为 datetime 类型
# #     df['Time'] = pd.to_datetime(df['Time'], errors='coerce')
# #
# #     # 对时间列进行排序，确保时间顺序
# #     df.sort_values('Time', inplace=True)
# #
# #     # 使用 interpolate 方法进行线性插值填充缺失的时间值
# #     df['Time'] = df['Time'].interpolate(method='time')
# #
# # # 分离数值型数据
# # numerical_cols = df.select_dtypes(include=[np.number]).columns
# #
# # # 填充数值型数据的缺失值，使用中位数填充
# # for col in numerical_cols:
# #     df[col].fillna(df[col].median(), inplace=True)
# #
# # # 分离分类型数据
# # categorical_cols = df.select_dtypes(include=['object']).columns
# #
# # # 填充分类型数据的缺失值，使用中位数填充
# # for col in categorical_cols:
# #     df[col].fillna(df[col].mode()[0], inplace=True)
# #
# # # 将结果保存为CSV文件
# # df.to_csv('补全后的数据.csv', index=False, header=False)




# ## 补全3--众数填充
# # import numpy as np
# # import pandas as pd
# #
# # # 读取数据集
# # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-无time.csv', header=None)
# # # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-time.csv', header=None)
# #
# # # 检查是否存在时间列
# # if 'Time' in df.columns:
# #     # 提取时间列并转换为 datetime 类型
# #     df['Time'] = pd.to_datetime(df['Time'], errors='coerce')
# #
# #     # 对时间列进行排序，确保时间顺序
# #     df.sort_values('Time', inplace=True)
# #
# #     # 使用 interpolate 方法进行线性插值填充缺失的时间值
# #     df['Time'] = df['Time'].interpolate(method='time')
# #
# # # 分离数值型数据
# # numerical_cols = df.select_dtypes(include=[np.number]).columns
# #
# # # 填充数值型数据的缺失值，使用众数填充
# # for col in numerical_cols:
# #     df[col].fillna(df[col].mode()[0], inplace=True)
# #
# # # 分离分类型数据
# # categorical_cols = df.select_dtypes(include=['object']).columns
# #
# # # 填充分类型数据的缺失值，使用众数填充
# # for col in categorical_cols:
# #     df[col].fillna(df[col].mode()[0], inplace=True)
# #
# # # 将结果保存为CSV文件
# # df.to_csv('补全后的数据.csv', index=False, header=False)




# # # #补全4--常数填充
# # import numpy as np
# # import pandas as pd
# #
# # # 读取数据集
# # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-无time.csv', header=None)
# # # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-time.csv', header=None)
# #
# # # 检查是否存在时间列
# # if 'Time' in df.columns:
# #     # 提取时间列并转换为 datetime 类型
# #     df['Time'] = pd.to_datetime(df['Time'], errors='coerce')
# #
# #     # 对时间列进行排序，确保时间顺序
# #     df.sort_values('Time', inplace=True)
# #
# #     # 使用 interpolate 方法进行线性插值填充缺失的时间值
# #     df['Time'] = df['Time'].interpolate(method='time')
# #
# # # 分离数值型数据和分类型数据
# # numerical_cols = df.select_dtypes(include=[np.number]).columns
# # categorical_cols = df.select_dtypes(include=['object']).columns
# #
# # # 定义常数填充值，这里以0为例
# # constant_value = 0
# #
# # # 填充数值型数据的缺失值，使用常数填充
# # for col in numerical_cols:
# #     df[col].fillna(constant_value, inplace=True)
# #
# # # 填充分类型数据的缺失值，使用常数0填充
# # constant_value_categorical = '0'  # 或者其他认为合适的值
# # for col in categorical_cols:
# #     df[col].fillna(constant_value_categorical, inplace=True)
# #
# # # 将结果保存为CSV文件
# # df.to_csv('补全后的数据.csv', index=False, header=False)



# # #补全5--K-最近邻填充
# import numpy as np
# import pandas as pd
# from sklearn.impute import KNNImputer

# # 读取数据集
# df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-无time.csv')
# # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-time.csv')

# # 检查是否存在时间列并处理
# if 'Time' in df.columns:
#     df['Time'] = pd.to_datetime(df['Time'], errors='coerce')
#     df.sort_values('Time', inplace=True)
#     df['Time'] = df['Time'].interpolate(method='time')

# # 分离数值型数据
# numerical_cols = df.select_dtypes(include=[np.number]).columns

# # 使用 KNN 填充数值型数据的缺失值
# imputer = KNNImputer(n_neighbors=2)
# df[numerical_cols] = imputer.fit_transform(df[numerical_cols])

# # 分离分类型数据
# categorical_cols = df.select_dtypes(include=['object']).columns

# # 填充分类型数据的缺失值，使用最近邻填充
# for col in categorical_cols:
#     df[col].fillna(df[col].mode()[0], inplace=True)

# # 将结果保存为CSV文件
# df.to_csv('补全后的数据.csv', index=False, header=False)


