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

Python每日提取指定日期记录并追加至CSV的实现问题

每日运行Python脚本提取指定日期记录并追加至CSV的实现方案

需求说明

每日运行Python脚本,从包含startdate、enddate、virtual_id、value四列的数据集中提取指定日期的所有记录,并将结果追加到同一个CSV文件中。

示例数据集

import pandas as pd

data = {'startdate': {0:'2022-12-19 06:01:12+00:00', 
                           1: '2022-12-19 13:49:09+00:00', 
                           2: '2022-12-19 13:20:36+00:00',
                           3: '2022-12-08 13:55:09+00:00', 
                           4: '2022-12-08 13:32:36+00:00', 
                           5: '2023-01-09 15:14:07+00:00', 
                           6: '2023-01-09 15:16:35+00:00'}, 
        'enddate': {0:'2022-12-19 06:25:06+00:00', 
                         1: '2022-12-19 13:59:29+00:00', 
                         2: '2022-12-19 13:26:40+00:00', 
                         3: '2022-12-08 13:55:27+00:00', 
                         4: '2022-12-08 13:45:41+00:00', 
                         5: '2023-12-09 15:29:39+00:00', 
                         6: '2023-01-09 15:28:43+00:00'}, 
        'virtual_id': {0: 1122, 1: 1125, 2: 1144,3: 1100, 4: 1136, 5: 1181, 6:1188}, 
        'value': {0:2000, 1: 5000, 2: 70000, 3: 8000, 4: 90000,5: 7200, 6: 81000}
        }

df = pd.DataFrame(data)

提取规则

  • 若1月9日运行脚本,提取2022-12-08的所有记录
  • 若1月10日运行脚本,提取2023-01-09的所有记录

错误尝试代码

# 错误代码片段
data = data[data.startdate == data.startdate.max()] & data[data.enddate == data.enddate.max()]
data = data.loc[[data.enddate.idxmax()]]

正确实现方案

步骤说明

  1. 将日期列转换为datetime类型,方便日期筛选
  2. 根据当前运行日期计算目标提取日期
  3. 筛选出startdate日期部分与目标日期匹配的所有记录
  4. 将结果追加到指定CSV文件(自动处理文件不存在的情况)

完整代码

import pandas as pd
from datetime import datetime, timedelta

def extract_and_append_records(df, csv_path):
    # 1. 转换startdate列为datetime类型,提取日期部分
    df['startdate'] = pd.to_datetime(df['startdate'])
    df['start_date_only'] = df['startdate'].dt.date
    
    # 2. 获取当前运行日期
    run_date = datetime.today().date()
    
    # 3. 根据运行日期计算目标提取日期(按需求规则)
    if run_date == datetime(2023, 1, 9).date():
        target_date = datetime(2022, 12, 8).date()
    elif run_date == datetime(2023, 1, 10).date():
        target_date = datetime(2023, 1, 9).date()
    else:
        # 可根据实际需求扩展其他日期的规则,比如默认提取前一天的记录
        target_date = run_date - timedelta(days=1)
    
    # 4. 筛选目标日期的所有记录
    filtered_df = df[df['start_date_only'] == target_date].drop(columns=['start_date_only'])
    
    # 5. 追加到CSV文件:若文件不存在则创建并写入表头,否则追加且不写表头
    filtered_df.to_csv(csv_path, mode='a', header=not pd.io.common.file_exists(csv_path), index=False)
    
    return filtered_df

# 调用示例
csv_file = 'daily_records.csv'
result = extract_and_append_records(df, csv_file)
print("提取的记录:")
print(result)

代码说明

  • 日期转换:使用pd.to_datetime将字符串格式的日期转为datetime类型,再通过dt.date提取纯日期部分,便于匹配筛选
  • 目标日期计算:针对用户给出的两个运行日期做了硬编码匹配,可根据实际需求扩展规则(比如通用规则为提取运行日期的前一天记录)
  • CSV追加:通过mode='a'实现追加写入,header参数自动判断是否需要写入表头,避免重复表头
  • 结果返回:返回筛选后的DataFrame,方便调试或后续处理

通用化扩展

如果需要更通用的规则(比如每日提取前一天的记录),可将目标日期计算部分修改为:

# 通用规则:提取运行日期的前一天记录
target_date = run_date - timedelta(days=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:01:41