You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas合并CSV文件时按文件名添加条件日期列未生效如何解决

问题原因
  • 条件判断不成立:代码中[f] == '1 Sept 21.csv'的写法是将列表类型的[f]和字符串类型的文件名比较,类型不一致永远返回False,所有条件分支都不会触发。
  • 赋值符号使用错误:所有给Date_of_file列赋值的位置都用了相等判断符==,而非赋值符=,即使进入分支也不会真的修改DataFrame的内容。
  • 列赋值逻辑错误:Pandas支持直接给整列赋值同一个固定值,不需要乘以DataFrame的长度,该写法反而会导致赋值逻辑报错。
修正方案

方案1:修改原有匹配逻辑

如果你需要保留手动匹配文件名的规则,修正后的代码如下:

import os
import glob
import pandas as pd
from datetime import datetime

os.chdir("../Stok list")
extension = 'csv'
all_filenames = [i for i in glob.glob(f'*.{extension}')]

combined_csv = []
for f in all_filenames:
    df = pd.read_csv(f)
    df['filename'] = f
    if f == '1 Sept 21.csv':
        df['Date_of_file'] = datetime.strptime('01/09/2021', '%d/%m/%Y')
    elif f == '2 Sept 21.csv':
        df['Date_of_file'] = datetime.strptime('02/09/2021', '%d/%m/%Y')
    elif f == '3 Sept 21.csv':
        df['Date_of_file'] = datetime.strptime('03/09/2021', '%d/%m/%Y')
    elif f == '6 Sept 21.csv':
        df['Date_of_file'] = datetime.strptime('06/09/2021', '%d/%m/%Y')
    elif f == '7 Sept 21.csv':
        df['Date_of_file'] = datetime.strptime('07/09/2021', '%d/%m/%Y')
    elif f == '8 Sept 21.csv':
        df['Date_of_file'] = datetime.strptime('08/09/2021', '%d/%m/%Y')
    elif f == '9 Sept 21.csv':
        df['Date_of_file'] = datetime.strptime('09/09/2021', '%d/%m/%Y')
    elif f == '10 Sept 21.csv':
        df['Date_of_file'] = datetime.strptime('10/09/2021', '%d/%m/%Y')
    elif f == '13 Sept 21.csv':
        df['Date_of_file'] = datetime.strptime('13/09/2021', '%d/%m/%Y')
    else:
        df['Date_of_file'] = 'No date'
    combined_csv.append(df)

combined_csv = pd.concat(combined_csv)
combined_csv.to_csv("../combined_csv.csv", index=False, encoding='utf-8-sig')

方案2:自动解析文件名生成日期(更推荐)

你的文件名本身就是标准的日期格式,可以直接从文件名解析日期,不需要写大量重复的条件分支,后续新增同格式的日期文件也不需要修改代码:

import os
import glob
import pandas as pd
from datetime import datetime

os.chdir("../Stok list")
extension = 'csv'
all_filenames = [i for i in glob.glob(f'*.{extension}')]

combined_csv = []
for f in all_filenames:
    df = pd.read_csv(f)
    df['filename'] = f
    try:
        # 直接从文件名去掉后缀后解析日期
        date_part = f.rsplit('.', 1)[0]
        df['Date_of_file'] = datetime.strptime(date_part, '%d %b %y')
    except ValueError:
        # 日期解析失败时赋值默认值
        df['Date_of_file'] = 'No date'
    combined_csv.append(df)

combined_csv = pd.concat(combined_csv)
combined_csv.to_csv("../combined_csv.csv", index=False, encoding='utf-8-sig')

内容的提问来源于stack exchange,提问作者Tman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:18:01