如何用Python处理带日期的Excel文件名:转格式及提取至DataFrame
没问题,我来帮你搞定这两个Excel文件名处理的问题,步骤和代码都给你整理好了:
问题1:将带有时间戳的Excel文件名转换为日期时间格式
文件名里的时间戳通常分两种常见情况,我分别给你解决方案:
情况1:文件名包含Unix时间戳(比如 1620000000_sales.xlsx)
Unix时间戳是从1970年1月1日开始累计的秒数(也可能是毫秒数,注意区分),处理步骤如下:
- 先剥离文件名的后缀,提取出时间戳字符串
- 转成整数后用
datetime.fromtimestamp()解析成日期时间对象
import os from datetime import datetime # 示例文件名 filename = "1620000000_sales.xlsx" # 去掉文件后缀(比如.xlsx) name_without_ext = os.path.splitext(filename)[0] # 分割出时间戳部分(假设时间戳在文件名开头,用下划线分隔) timestamp_str = name_without_ext.split("_")[0] # 转成整数(如果是毫秒级时间戳,记得除以1000) timestamp = int(timestamp_str) # 转换为日期时间 dt = datetime.fromtimestamp(timestamp) print(dt) # 输出示例:2021-05-03 13:20:00
情况2:文件名包含格式化时间戳(比如 20210503132000_sales.xlsx,格式为YYYYMMDDHHMMSS)
这种是直接用数字拼接的日期时间字符串,我们可以指定格式来解析:
- 提取对应长度的字符串片段
- 用
datetime.strptime()传入匹配的格式串转换
from datetime import datetime filename = "20210503132000_sales.xlsx" name_without_ext = filename.split(".")[0] # 提取前14位(对应YYYYMMDDHHMMSS) timestamp_str = name_without_ext[:14] # 按指定格式解析 dt = datetime.strptime(timestamp_str, "%Y%m%d%H%M%S") print(dt) # 输出:2021-05-03 13:20:00
如果只有日期部分(比如20210503_sales.xlsx),把格式串改成"%Y%m%d"就行。
问题2:提取文件名中的日期并添加为DataFrame的新变量
针对你给出的示例文件名20190217 - myfile.xlsx,我们可以按以下步骤操作:
- 从文件名中提取日期字符串
- 转换为日期/日期时间对象
- 读取Excel文件后,将这个日期添加为新列
单个文件处理代码:
import pandas as pd import os from datetime import datetime # 文件路径 file_path = "./20190217 - myfile.xlsx" # 获取纯文件名(避免路径干扰) filename = os.path.basename(file_path) # 按分隔符" - "分割,提取日期部分 date_str = filename.split(" - ")[0] # 转换为日期类型(如果需要完整datetime,去掉.date()即可) file_date = datetime.strptime(date_str, "%Y%m%d").date() # 读取Excel为DataFrame df = pd.read_excel(file_path) # 添加新列"file_date" df["file_date"] = file_date # 查看结果 print(df.head())
批量处理多个文件:
如果有一堆同格式的Excel文件,用循环批量处理并合并成一个DataFrame:
import pandas as pd import os from datetime import datetime # 存放Excel文件的文件夹路径 folder_path = "./your_excel_folder/" # 用来存储所有DataFrame的列表 all_dfs = [] # 遍历文件夹里的所有文件 for filename in os.listdir(folder_path): # 只处理xlsx文件 if filename.endswith(".xlsx"): file_full_path = os.path.join(folder_path, filename) # 提取日期字符串 date_str = filename.split(" - ")[0] file_date = datetime.strptime(date_str, "%Y%m%d").date() # 读取文件 df = pd.read_excel(file_full_path) # 添加日期列 df["file_date"] = file_date # 加入列表 all_dfs.append(df) # 合并所有DataFrame combined_df = pd.concat(all_dfs, ignore_index=True) print(combined_df.head())
注意:如果你的文件名分隔符不是" - "(比如下划线_),只要调整split()里的参数就行,比如filename.split("_")[0]。
内容的提问来源于stack exchange,提问作者urtaeyang
相关产品推荐
相关产品推荐

