作者是做时序预测相关的深度学习的,在数据处理中发现日期格式在处理中有许多的不方便的地方,而且时序预测中日期并没有语义信息,因此为了方便计算就把日期格式改为数值格式。
作者转数值的方法就是excel中的标准方法,指定的日期格式(如 "2013-08-26")转换为Excel中的数值格式(即距离1900-01-01的天数),注意有些较旧MAC版本的excel是从1904年开始的,大家调整时也可以自己选择。
在这个脚本中,我们首先读取Excel文件,然后遍历指定的日期列名。对于每个日期列,我们尝试将其从字符串转换为datetime
类型,然后进一步转换为从1900-01-01开始的天数。最后,我们使用to_excel
方法将修改后的数据框保存回原文件路径,从而覆盖原有的Excel文件。
确保将folder_path
和date_column_names
替换为适合你的实际路径和列名。同时,这个脚本假设你的日期列是字符串类型,并且格式是"YYYY-MM-DD"。如果日期列的格式有所不同,你需要调整pd.to_datetime
中的format
参数来匹配你的实际格式。
import os
import pandas as pd
# 设置文件夹路径和要转换的列名列表
folder_path = 'path_to_your_folder' # 替换为你的文件夹路径
date_column_names = ['Column1', 'Column2'] # 替换为你要转换的列名
# 获取文件夹中所有Excel文件的路径
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]
# 遍历每个Excel文件
for file in excel_files:
file_path = os.path.join(folder_path, file)
# 读取Excel文件
df = pd.read_excel(file_path, engine='openpyxl')
# 遍历指定要转换的列名
for col_name in date_column_names:
if col_name in df.columns and pd.api.types.is_string_dtype(df[col_name]):
# 尝试将字符串格式的日期转换为datetime类型
df[col_name] = pd.to_datetime(df[col_name], format='%Y-%m-%d', errors='coerce')
# 检查转换是否成功,并转换为Excel中的天数表示(浮点数)
if pd.api.types.is_datetime64_any_dtype(df[col_name].dtype):
# Excel日期从1900-01-01开始,但需要考虑1900年的闰年问题
excel_epoch = pd.Timestamp('1899-12-30')
df[col_name] = (df[col_name] - excel_epoch) / pd.Timedelta(days=1)
# 保存修改后的Excel文件,覆盖原文件
df.to_excel(file_path, index=False, engine='openpyxl')
print(f"Converted and overwritten {file}")