test.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. # from pathlib import Path
  2. # import json
  3. # import pandas as pd
  4. #
  5. # # 获取当前脚本路径
  6. # current_dir = Path(__file__).parent
  7. # json_path = current_dir.parent / "config" / "config.json"
  8. #
  9. # # 读取 JSON 配置文件
  10. # with open(json_path, "r", encoding="utf-8") as f:
  11. # config = json.load(f)
  12. #
  13. # conditions = config["startupConditions"]
  14. #
  15. #
  16. # def analyze_startup_conditions(dataframe, conditions):
  17. # """
  18. # 分析 DataFrame 是否满足启动条件。
  19. #
  20. # 参数:
  21. # dataframe (pd.DataFrame): 原始数据
  22. # conditions (list): 包含 column 和 state 的字典列表
  23. #
  24. # 返回:
  25. # dict: 包含是否成功、匹配的列、分析数据等信息
  26. # """
  27. # result = {
  28. # "success": False,
  29. # "matched_columns": [],
  30. # "start_index": None,
  31. # "analysis_data": None,
  32. # "msg": ""
  33. # }
  34. #
  35. # # 提取列名和状态值
  36. # required_columns = [cond["column"] for cond in conditions]
  37. # thresholds = {cond["column"]: cond["state"] for cond in conditions}
  38. #
  39. # # 检查是否有缺失列
  40. # missing_cols = [col for col in required_columns if col not in dataframe.columns]
  41. # if missing_cols:
  42. # result["msg"] = f"缺少以下列: {', '.join(missing_cols)}"
  43. # return result
  44. #
  45. # # 构建掩码:判断每一行是否所有列都 >= 对应 state
  46. # condition_mask = pd.DataFrame({
  47. # col: (dataframe[col] >= thresholds[col]) for col in required_columns
  48. # }).all(axis=1)
  49. #
  50. # if condition_mask.any():
  51. # # 找到第一个满足所有条件的行
  52. # start_index = condition_mask.idxmax()
  53. # result["success"] = True
  54. # result["start_index"] = start_index
  55. # result["matched_columns"] = required_columns
  56. # result["analysis_data"] = dataframe.loc[start_index:]
  57. # result["msg"] = "✅ 启动完成,已找到符合条件的数据段"
  58. # else:
  59. # result["msg"] = "⛔ 液压泵未全部达到25,无分析数据"
  60. #
  61. # return result
  62. #
  63. #
  64. # if __name__ == '__main__':
  65. # csv_path = r"D:\project\daima\huang\Hang_KG\data\排气原始数据.csv"
  66. # df = pd.read_csv(csv_path, encoding="UTF-8")
  67. #
  68. # analysis_result = analyze_startup_conditions(df, conditions)
  69. #
  70. # print("📌 状态:", analysis_result["msg"])
  71. # if analysis_result["success"]:
  72. # print("\n🚀 从以下行开始的数据:")
  73. # print(analysis_result["analysis_data"].head()) # 只显示前几行用于示例
  74. from pathlib import Path
  75. import json
  76. import pandas as pd
  77. # 获取当前脚本路径
  78. current_dir = Path(__file__).parent
  79. json_path = current_dir.parent / "config" / "config.json"
  80. # 读取 JSON 配置文件
  81. with open(json_path, "r", encoding="utf-8") as f:
  82. config = json.load(f)
  83. def analyze_startup_conditions(dataframe):
  84. """
  85. 分析 DataFrame 是否满足启动条件。
  86. 参数:
  87. dataframe (pd.DataFrame): 原始数据
  88. conditions (list): 包含 column 和 state 的字典列表
  89. 返回:
  90. dict: 包含是否成功、匹配的列、分析数据等信息
  91. """
  92. result = {
  93. "success": False,
  94. "matched_columns": [],
  95. "start_index": None,
  96. "analysis_data": None,
  97. "msg": ""
  98. }
  99. # 提取列名和状态值
  100. conditions = config["startupConditions"]
  101. required_columns = [cond["column"] for cond in conditions]
  102. thresholds = {cond["column"]: cond["state"] for cond in conditions}
  103. # 检查是否有缺失列
  104. missing_cols = [col for col in required_columns if col not in dataframe.columns]
  105. if missing_cols:
  106. result["msg"] = f"缺少以下列: {', '.join(missing_cols)}"
  107. return result
  108. # 构建掩码:判断每一行是否所有列都 >= 对应 state
  109. condition_mask = pd.DataFrame({
  110. col: (dataframe[col] >= thresholds[col]) for col in required_columns
  111. }).all(axis=1)
  112. if condition_mask.any():
  113. # 找到第一个满足所有条件的行
  114. start_index = condition_mask.idxmax()
  115. print(start_index)
  116. result["success"] = True
  117. result["start_index"] = start_index
  118. result["matched_columns"] = required_columns
  119. result["analysis_data"] = dataframe.loc[start_index:]
  120. result["msg"] = "✅ 启动完成,已找到符合条件的数据段"
  121. else:
  122. result["msg"] = "⛔ 液压泵未全部达到25,无分析数据"
  123. return result
  124. if __name__ == '__main__':
  125. csv_path = r"D:\project\daima\huang\Hang_KG\data\排气原始数据.csv"
  126. df = pd.read_csv(csv_path, encoding="UTF-8")
  127. analysis_result = analyze_startup_conditions(df)
  128. print("📌 状态:", analysis_result["msg"])
  129. if analysis_result["success"]:
  130. print("\n🚀 从以下行开始的数据:")
  131. print(analysis_result["analysis_data"].head()) # 只显示前几行用于示例