补全.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. # import matplotlib.pyplot as plt
  2. # from matplotlib import rcParams
  3. # plt.rcParams['xtick.direction'] = 'in'
  4. # plt.rcParams['ytick.direction'] = 'in'
  5. # plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
  6. # plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
  7. # config = {
  8. # "font.family": 'serif',
  9. # "font.size": 20,
  10. # "mathtext.fontset": 'stix',
  11. # "font.serif": ['Times New Roman'],#宋体
  12. # 'axes.unicode_minus': False # 处理负号
  13. # }
  14. # rcParams.update(config)
  15. #补全1--平均值填充
  16. import numpy as np
  17. import pandas as pd
  18. # 读取数据集
  19. # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-无time.csv', header=None)
  20. df = pd.read_csv(r'D:\验收材料\空工大-装备性能退化评估和故障预测健康管理软件\里程碑最终算法\数据缺失-time.csv', header=None)
  21. # 检查是否存在时间列
  22. if 'Time' in df.columns:
  23. # 提取时间列并转换为 datetime 类型
  24. df['Time'] = pd.to_datetime(df['Time'], errors='coerce')
  25. # 对时间列进行排序,确保时间顺序
  26. df.sort_values('Time', inplace=True)
  27. # 使用 interpolate 方法进行线性插值填充缺失的时间值
  28. df['Time'] = df['Time'].interpolate(method='time')
  29. # 如果时间列经过填充后,需要重新排序以保持原有的顺序(如果需要的话)
  30. # df.sort_index(inplace=True)
  31. # 分离数值型数据
  32. numerical_cols = df.select_dtypes(include=[np.number]).columns
  33. # 填充数值型数据的缺失值,使用均值填充
  34. for col in numerical_cols:
  35. df[col].fillna(df[col].mean(), inplace=True)
  36. # 分离分类型数据
  37. categorical_cols = df.select_dtypes(include=['object']).columns
  38. # 填充分类型数据的缺失值,使用平均值填充
  39. for col in categorical_cols:
  40. df[col].fillna(df[col].mode()[0], inplace=True)
  41. # 将结果保存为CSV文件
  42. df.to_csv('补全后的数据.csv', index=False, header=False)
  43. # # # #补全2--中位数填充
  44. # # import numpy as np
  45. # # import pandas as pd
  46. # #
  47. # # # 读取数据集
  48. # # # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-无time.csv', header=None)
  49. # # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-time.csv', header=None)
  50. # #
  51. # # # 检查是否存在时间列
  52. # # if 'Time' in df.columns:
  53. # # # 提取时间列并转换为 datetime 类型
  54. # # df['Time'] = pd.to_datetime(df['Time'], errors='coerce')
  55. # #
  56. # # # 对时间列进行排序,确保时间顺序
  57. # # df.sort_values('Time', inplace=True)
  58. # #
  59. # # # 使用 interpolate 方法进行线性插值填充缺失的时间值
  60. # # df['Time'] = df['Time'].interpolate(method='time')
  61. # #
  62. # # # 分离数值型数据
  63. # # numerical_cols = df.select_dtypes(include=[np.number]).columns
  64. # #
  65. # # # 填充数值型数据的缺失值,使用中位数填充
  66. # # for col in numerical_cols:
  67. # # df[col].fillna(df[col].median(), inplace=True)
  68. # #
  69. # # # 分离分类型数据
  70. # # categorical_cols = df.select_dtypes(include=['object']).columns
  71. # #
  72. # # # 填充分类型数据的缺失值,使用中位数填充
  73. # # for col in categorical_cols:
  74. # # df[col].fillna(df[col].mode()[0], inplace=True)
  75. # #
  76. # # # 将结果保存为CSV文件
  77. # # df.to_csv('补全后的数据.csv', index=False, header=False)
  78. # ## 补全3--众数填充
  79. # # import numpy as np
  80. # # import pandas as pd
  81. # #
  82. # # # 读取数据集
  83. # # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-无time.csv', header=None)
  84. # # # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-time.csv', header=None)
  85. # #
  86. # # # 检查是否存在时间列
  87. # # if 'Time' in df.columns:
  88. # # # 提取时间列并转换为 datetime 类型
  89. # # df['Time'] = pd.to_datetime(df['Time'], errors='coerce')
  90. # #
  91. # # # 对时间列进行排序,确保时间顺序
  92. # # df.sort_values('Time', inplace=True)
  93. # #
  94. # # # 使用 interpolate 方法进行线性插值填充缺失的时间值
  95. # # df['Time'] = df['Time'].interpolate(method='time')
  96. # #
  97. # # # 分离数值型数据
  98. # # numerical_cols = df.select_dtypes(include=[np.number]).columns
  99. # #
  100. # # # 填充数值型数据的缺失值,使用众数填充
  101. # # for col in numerical_cols:
  102. # # df[col].fillna(df[col].mode()[0], inplace=True)
  103. # #
  104. # # # 分离分类型数据
  105. # # categorical_cols = df.select_dtypes(include=['object']).columns
  106. # #
  107. # # # 填充分类型数据的缺失值,使用众数填充
  108. # # for col in categorical_cols:
  109. # # df[col].fillna(df[col].mode()[0], inplace=True)
  110. # #
  111. # # # 将结果保存为CSV文件
  112. # # df.to_csv('补全后的数据.csv', index=False, header=False)
  113. # # # #补全4--常数填充
  114. # # import numpy as np
  115. # # import pandas as pd
  116. # #
  117. # # # 读取数据集
  118. # # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-无time.csv', header=None)
  119. # # # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-time.csv', header=None)
  120. # #
  121. # # # 检查是否存在时间列
  122. # # if 'Time' in df.columns:
  123. # # # 提取时间列并转换为 datetime 类型
  124. # # df['Time'] = pd.to_datetime(df['Time'], errors='coerce')
  125. # #
  126. # # # 对时间列进行排序,确保时间顺序
  127. # # df.sort_values('Time', inplace=True)
  128. # #
  129. # # # 使用 interpolate 方法进行线性插值填充缺失的时间值
  130. # # df['Time'] = df['Time'].interpolate(method='time')
  131. # #
  132. # # # 分离数值型数据和分类型数据
  133. # # numerical_cols = df.select_dtypes(include=[np.number]).columns
  134. # # categorical_cols = df.select_dtypes(include=['object']).columns
  135. # #
  136. # # # 定义常数填充值,这里以0为例
  137. # # constant_value = 0
  138. # #
  139. # # # 填充数值型数据的缺失值,使用常数填充
  140. # # for col in numerical_cols:
  141. # # df[col].fillna(constant_value, inplace=True)
  142. # #
  143. # # # 填充分类型数据的缺失值,使用常数0填充
  144. # # constant_value_categorical = '0' # 或者其他认为合适的值
  145. # # for col in categorical_cols:
  146. # # df[col].fillna(constant_value_categorical, inplace=True)
  147. # #
  148. # # # 将结果保存为CSV文件
  149. # # df.to_csv('补全后的数据.csv', index=False, header=False)
  150. # # #补全5--K-最近邻填充
  151. # import numpy as np
  152. # import pandas as pd
  153. # from sklearn.impute import KNNImputer
  154. # # 读取数据集
  155. # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-无time.csv')
  156. # # df = pd.read_csv(r'E:\BaiduSyncdisk\zhiguan\01最近做的\算法调试\自己调试--Y\调试\数据缺失-time.csv')
  157. # # 检查是否存在时间列并处理
  158. # if 'Time' in df.columns:
  159. # df['Time'] = pd.to_datetime(df['Time'], errors='coerce')
  160. # df.sort_values('Time', inplace=True)
  161. # df['Time'] = df['Time'].interpolate(method='time')
  162. # # 分离数值型数据
  163. # numerical_cols = df.select_dtypes(include=[np.number]).columns
  164. # # 使用 KNN 填充数值型数据的缺失值
  165. # imputer = KNNImputer(n_neighbors=2)
  166. # df[numerical_cols] = imputer.fit_transform(df[numerical_cols])
  167. # # 分离分类型数据
  168. # categorical_cols = df.select_dtypes(include=['object']).columns
  169. # # 填充分类型数据的缺失值,使用最近邻填充
  170. # for col in categorical_cols:
  171. # df[col].fillna(df[col].mode()[0], inplace=True)
  172. # # 将结果保存为CSV文件
  173. # df.to_csv('补全后的数据.csv', index=False, header=False)