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

Python转换CSV日期格式并计算日期间隔的技术求助

问题

我正在用Python处理一份已导入的CSV文件,文件包含开始日期和结束日期两列。需要将这两列日期转换为Python可识别的格式,以此计算两个日期之间的天数差。CSV中的日期格式示例如下:

Wednesday, 26-Jun-24 02:13:48 UTC
Thursday, 04-Jul-24 03:14:09 UTC (12.54 days ago)

这是从CSV文件中复制的精确格式。我曾尝试导入dateutil解析日期,但不确定具体用法,也不清楚这是否为最优方案,寻求技术指导。以下是我试过但未得到有效结果的代码:

from dateutil.parser import parse
import datetime

d = 'Monday, 10-Jun-24 17:16:47 UTC'

dt = parse(d)
print(dt.strftime('%m/%d/%y'))
解决方案

步骤1:清理日期字符串

部分日期末尾带有(12.54 days ago)这类冗余内容,需先去除这部分,只保留有效日期片段:

def clean_date_str(date_str):
    if '(' in date_str:
        return date_str.split('(')[0].strip()
    return date_str.strip()

步骤2:解析日期

有两种可靠实现方式:

方式一:使用dateutil.parser(灵活适配格式)

你的原代码本身可正常运行,失败原因大概率是未处理带括号的日期。结合清理函数后:

from dateutil.parser import parse

d1 = 'Wednesday, 26-Jun-24 02:13:48 UTC'
d2 = 'Thursday, 04-Jul-24 03:14:09 UTC  (12.54 days ago)'

# 先清理冗余内容
clean_d1 = clean_date_str(d1)
clean_d2 = clean_date_str(d2)

# 解析为datetime对象
dt1 = parse(clean_d1)
dt2 = parse(clean_d2)

print(dt1)  # 输出:2024-06-26 02:13:48+00:00
print(dt2)  # 输出:2024-07-04 03:14:09+00:00

方式二:使用datetime.strptime(性能更优,适合固定格式)

由于你的日期格式固定,可通过指定格式字符串解析,避免dateutil灵活解析的潜在风险:
格式参数说明:

  • %A:完整星期名称(如Wednesday)
  • %d:两位日期(26)
  • %b:缩写月份(Jun)
  • %y:两位年份(24)
  • %H:%M:%S:时分秒
  • %Z:时区(UTC)

代码示例:

from datetime import datetime

date_format = '%A, %d-%b-%y %H:%M:%S %Z'

dt1 = datetime.strptime(clean_d1, date_format)
dt2 = datetime.strptime(clean_d2, date_format)

步骤3:计算天数差

得到两个datetime对象后,直接相减即可获取时间差,再提取天数:

delta = dt2 - dt1
print(delta.days)  # 输出:8
# 若需包含小时分钟的小数天数,可转换为总秒数计算
total_days = delta.total_seconds() / (24 * 3600)
print(total_days)  # 输出:8.042025462962963

处理CSV文件的完整流程

结合pandas(处理CSV的常用库)的完整实现:

import pandas as pd
from datetime import datetime

def clean_and_parse_date(date_str):
    clean_str = date_str.split('(')[0].strip() if '(' in date_str else date_str.strip()
    date_format = '%A, %d-%b-%y %H:%M:%S %Z'
    return datetime.strptime(clean_str, date_format)

# 读取CSV文件
df = pd.read_csv('your_file.csv')

# 转换日期列
df['开始日期'] = df['开始日期'].apply(clean_and_parse_date)
df['结束日期'] = df['结束日期'].apply(clean_and_parse_date)

# 计算天数差
df['天数差'] = (df['结束日期'] - df['开始日期']).dt.days
# 计算包含小数的精确天数差
df['精确天数差'] = (df['结束日期'] - df['开始日期']).dt.total_seconds() / (24 * 3600)

print(df.head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:05:15