代码如下:
# -*- coding:utf-8 -*-
# @author:Ye Zhoubing
# @datetime:2025/8/1 10:24
# @software: PyCharm
# -*- coding:utf-8 -*-
# @author:Ye Zhoubing
# @datetime:2025/2/19 10:26
# @software: PyCharm
"""
按小时匹配两个 CSV 文件中的数据,并将结果保存为新的 Excel 文件。
"""
import pandas as pd
import osfolder_path = r'C:\Users\32649\Desktop\excel\water-discharge\csv' # 请在此处填写文件夹路径,例如 r'C:\Users\32649\Desktop\太浦河流量水位预测\lstm_target\5-20'
# 获取文件夹内的所有文件名
file_names = os.listdir(folder_path)# 遍历文件夹内的所有文件
for file_name in enumerate(file_names):# 读取两个文件df1 = pd.read_csv(r'C:\Users\32649\Desktop\太浦河流量水位预测\lstm_target\5-20\train_2014.csv') # 包含日期列df2 = pd.read_csv(r'C:\Users\32649\Desktop\excel\water-discharge\csv\{}'.format(file_name[1]), encoding="gbk") # 包含完整数据# 将日期列转为 datetime 类型df1['date'] = pd.to_datetime(df1['date'])df2['时间'] = pd.to_datetime(df2['时间'])# 提取精确到小时的时间(去掉分钟秒)df1['date_hour'] = df1['date'].dt.floor('h')df2['date_hour'] = df2['时间'].dt.floor('h')# 获取 df1 中所有的唯一“小时”时间hour_list = df1['date_hour'].unique()# 在 df2 中筛选与 df1 中相同“小时”的数据matched_df = df2[df2['date_hour'].isin(hour_list)]# 保存结果为新 Excel 文件matched_df.to_excel(f'{file_name[1]}'.replace('.csv','xlsx'), index=False)print(f"匹配完成,已按小时保存结果为{file_name[1]}.replace('.csv','xlsx')")
不超过15分钟的误差代码如下:
# -*- coding:utf-8 -*-
# @author:Ye Zhoubing
# @datetime:2025/8/1 15:26
# @software: PyCharm
"""
按小时匹配两个 CSV 文件中的数据,并将结果保存为新的 Excel 文件。
不超过15分钟的误差。
"""
import pandas as pd
import os# 设置路径
folder_path = r'C:\Users\32649\Desktop\excel\water-discharge\csv'
df1_path = r'C:\Users\32649\Desktop\太浦河流量水位预测\lstm_target\5-20\train_2014.csv'# 读取 df1(整点时间)
df1 = pd.read_csv(df1_path)
df1['date'] = pd.to_datetime(df1['date'])
target_times = df1['date'].sort_values().reset_index(drop=True)# 创建输出文件夹
output_dir = 'result'
os.makedirs(output_dir, exist_ok=True)# 允许误差:±15分钟
tolerance = pd.Timedelta(minutes=15)# 遍历 df2 文件夹下所有文件
file_names = os.listdir(folder_path)for file_name in file_names:file_path = os.path.join(folder_path, file_name)df2 = pd.read_csv(file_path, encoding="gbk")df2['时间'] = pd.to_datetime(df2['时间'])df2.dropna(axis=1,how='any') # 删除包含 NaN 的列# 函数:返回最近的整点时间,如果在±15分钟内,否则返回 NaTdef match_date_hour(t):diffs = abs(target_times - t)min_diff = diffs.min()if min_diff <= tolerance:return target_times[diffs.idxmin()]else:return pd.NaT# 应用匹配df2['date_hour'] = df2['时间'].apply(match_date_hour)# 保留匹配成功的行(date_hour 不为空)df2_matched = df2[df2['date_hour'].notna()]# 保存结果output_path = os.path.join(output_dir, f'{os.path.splitext(file_name)[0]}_matched.xlsx')df2_matched.to_excel(output_path, index=False)print(f"匹配完成:{file_name} → 保存至 {output_path}")