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

Python按条件替换CSV日期列值失效,求问题排查与解决

问题:按条件修改CSV日期值未生效

原始CSV内容

Date
0  2022-11-05
1  2022-11-06
2  2022-11-08
3  2022-11-09

需求

若日期为周六则加2天,周日则加1天,替换原CSV中的值。

错误代码

df = pd.read_csv('Book1.csv')
date = df["Date"]
for d in date:
    date_object = datetime.strptime(d, '%Y-%m-%d').date()
    #print(date_object)
    weekdayidx=date_object.isoweekday()
    #print(weekdayidx)
    if weekdayidx == 6:
       date_final = date_object.replace(day=date_object.day + 2)
    elif weekdayidx == 7:
       date_final = date_object.replace(day=date_object.day + 1)
    else:
        date_final = date_object
    print(date_final)
df['Date'] = df['Date'].replace({'d': 'date_final'})
df.to_csv("Book1.csv", index=False)
print(df)

问题原因

  1. 循环内仅打印了计算后的日期,未将修改值存入DataFrame,所有计算没有作用到原数据上。
  2. 最后一行的replace({'d': 'date_final'})完全无效:这里的'd'和'date_final'是固定字符串,不是循环里的变量,无法匹配任何日期值,自然不会修改数据。
  3. 用Python原生datetime循环处理pandas列,效率低且容易出现变量作用域问题。

正确解决方案

利用pandas的矢量化日期操作处理,简洁高效:

import pandas as pd

# 读取CSV并将Date列转为日期类型
df = pd.read_csv('Book1.csv')
df['Date'] = pd.to_datetime(df['Date'])

# 定义偏移规则:周六(对应isoweekday=6)加2天,周日(7)加1天,其余加0天
offset_map = {6: 2, 7: 1}
offset_days = df['Date'].dt.isoweekday().map(offset_map).fillna(0).astype(int)

# 应用日期偏移,转回原字符串格式
df['Date'] = (df['Date'] + pd.to_timedelta(offset_days, unit='d')).dt.strftime('%Y-%m-%d')

# 保存修改后的CSV
df.to_csv("Book1.csv", index=False)
print(df)

验证结果

执行后CSV内容会更新为:

Date
2022-11-07
2022-11-07
2022-11-08
2022-11-09

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:30:51