# -*- coding:utf-8 -*-
# @author:Ye Zhoubing
# @datetime:2025/12/10 20:11
# @software: PyCharm
# -*- coding:utf-8 -*-
"""
篩選出匹配時間段,就用csv中相同的值代替,其它用0代替
"""
import pandas as pd
def extract_data_by_time(csv_file, xlsx_file, csv_time_column,
xlsx_time_column="時間",
output_file=None):
"""
輸出三列:
1. 事件(CSV 時間)
2. 原來的值(CSV 值)
3. 篩選出來的值(如果該時間出現在 XLSX,填原值;否則為空)
"""
print("正在讀取 CSV 文件...")
csv_data = pd.read_csv(csv_file)
print("正在讀取 XLSX 時間段...")
xlsx_data = pd.read_excel(xlsx_file)
# 轉換時間格式
csv_data[csv_time_column] = pd.to_datetime(csv_data[csv_time_column])
xlsx_data[xlsx_time_column] = pd.to_datetime(xlsx_data[xlsx_time_column])
# CSV 真實的值列 = 除時間列之外的第一列
csv_value_column = [col for col in csv_data.columns if col != csv_time_column][0]
# ====== 核心部分:標記 XLSX 中的時間 ======
xlsx_times = set(xlsx_data[xlsx_time_column])
# 創建一個新列:篩選出來的值
csv_data["篩選出來的值"] = csv_data.apply(
lambda row: row[csv_value_column] if row[csv_time_column] in xlsx_times else 0, # 用0代替
axis=1
)
# 重命名為指定輸出格式
result = csv_data.rename(columns={
csv_time_column: "事件",
csv_value_column: "原來的值"
})[["事件", "原來的值", "篩選出來的值"]]
print("處理完成,前5行如下:")
print(result.head())
if output_file:
result.to_excel(output_file, index=False)
print(f"結果已保存到:{output_file}")
return result
# 示例調用
if __name__ == "__main__":
extract_data_by_time(
csv_file="NH3N_future_forecast.csv",
xlsx_file="預測與實測對比COD.xlsx",
csv_time_column="date",
output_file="最終三列結果.xlsx"
)