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

求助:CSV文件多日期行拆分至同行列及Python代码修复

解决CSV多日期拆分问题

核心问题是直接按逗号拆分会破坏长格式日期,正确思路是用正则表达式精准匹配两种日期格式,提取每行的所有完整日期后再扩展为新列。

实现步骤

  • 编写正则表达式匹配两种日期格式:

    • 短格式(如31-Mar-24):\d{2}-[A-Za-z]{3}-\d{2}
    • 长格式(如Nov 21, 2024):[A-Za-z]{3} \d{2}, \d{4}
      组合后的匹配规则:r'(\d{2}-[A-Za-z]{3}-\d{2}|[A-Za-z]{3} \d{2}, \d{4})'
  • 读取CSV每行数据,用re.findall()提取所有日期

  • 将提取到的日期按顺序转为date1、date2等新列,与原行数据合并

基于原生csv模块的代码示例

import csv
import re

# 定义日期匹配正则
date_pattern = re.compile(r'(\d{2}-[A-Za-z]{3}-\d{2}|[A-Za-z]{3} \d{2}, \d{4})')

# 读取原CSV并处理
with open('input.csv', 'r', newline='', encoding='utf-8') as infile, \
     open('output.csv', 'w', newline='', encoding='utf-8') as outfile:
    
    reader = csv.DictReader(infile)
    # 先遍历一次获取最大日期数量,确保输出列完整
    rows = list(reader)
    max_dates = max(len(date_pattern.findall(row['dates'])) for row in rows)
    fieldnames = reader.fieldnames + [f'date{i+1}' for i in range(max_dates)]
    
    writer = csv.DictWriter(outfile, fieldnames=fieldnames)
    writer.writeheader()
    
    for row in rows:
        dates = date_pattern.findall(row['dates'])
        # 给当前行添加date1、date2...字段
        for i, date in enumerate(dates):
            row[f'date{i+1}'] = date
        # 补全缺失的date列(行内日期数少于最大数时)
        for i in range(len(dates), max_dates):
            row[f'date{i+1}'] = ''
        writer.writerow(row)

基于pandas的简化实现(更高效)

如果熟悉pandas,代码会更简洁:

import pandas as pd
import re

date_pattern = re.compile(r'(\d{2}-[A-Za-z]{3}-\d{2}|[A-Za-z]{3} \d{2}, \d{4})')

df = pd.read_csv('input.csv')
# 提取所有日期并转为多列
date_cols = df['dates'].apply(lambda x: pd.Series(date_pattern.findall(x)))
# 重命名列名为date1、date2...
date_cols.columns = [f'date{i+1}' for i in date_cols.columns]
# 合并原数据和新日期列
result_df = pd.concat([df, date_cols], axis=1)
# 保存结果
result_df.to_csv('output.csv', index=False)

注意事项

  • 正则表达式可根据实际日期格式微调(比如月份缩写长度、日期是否为1位数字)
  • 如果有其他日期格式,只需在正则中添加对应的匹配规则即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:43:32