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

如何用Lambda与正则过滤Pandas DataFrame筛选指定日期前的S3路径

高效筛选Pandas DataFrame中S3路径日期早于指定值的行

你有一个包含数百万行数据的Pandas DataFrame,结构如下:

import pandas as pd

data = {'s3_path': ['s3://mybucket/date=2023-10-26/f1.txt', 's3://mybucket/date=2023-10-25/f2.txt', 's3://mybucket/date=2023-10-24/f3.txt', 's3://mybucket/date=2023-10-23/f4.txt']}
df = pd.DataFrame(data)

需求是筛选出s3_path中日期早于2023-10-24的行。

现有代码的问题

  • apply是逐行处理逻辑,面对数百万行数据时性能极差,完全不适合大规模数据集
  • is_before函数存在逻辑错误:if cur_date < cutoff_date:后仅写了True但未返回,最终函数会默认返回None
  • 未实现从s3_path中提取日期字符串并传入函数的逻辑

高效解决方案

利用Pandas的矢量化字符串操作和日期类型转换,全程避免逐行循环,能大幅提升处理速度,步骤如下:

  1. 提取日期字符串
    使用str.extract配合正则表达式,一次性提取所有行中的日期片段:

    date_regex = r'date=(\d{4}-\d{2}-\d{2})'
    df['extracted_date'] = df['s3_path'].str.extract(date_regex, expand=False)
    
  2. 转换为datetime类型
    使用pd.to_datetime进行矢量化转换,比循环调用datetime.strptime效率高几个数量级:

    df['extracted_date'] = pd.to_datetime(df['extracted_date'], format='%Y-%m-%d')
    
  3. 筛选目标行
    通过布尔索引直接过滤DataFrame:

    cutoff_date = pd.to_datetime('2023-10-24')
    filtered_df = df[df['extracted_date'] < cutoff_date].drop(columns=['extracted_date'])
    

完整整合代码

import pandas as pd

data = {'s3_path': ['s3://mybucket/date=2023-10-26/f1.txt', 's3://mybucket/date=2023-10-25/f2.txt', 's3://mybucket/date=2023-10-24/f3.txt', 's3://mybucket/date=2023-10-23/f4.txt']}
df = pd.DataFrame(data)

# 提取日期并转换类型
date_regex = r'date=(\d{4}-\d{2}-\d{2})'
df['extracted_date'] = pd.to_datetime(df['s3_path'].str.extract(date_regex, expand=False), format='%Y-%m-%d')

# 筛选并清理临时列
cutoff_date = pd.to_datetime('2023-10-24')
filtered_df = df[df['extracted_date'] < cutoff_date].drop(columns=['extracted_date'])

print(filtered_df)

输出结果:

s3_path
3  s3://mybucket/date=2023-10-23/f4.txt

额外优化建议

  • 如果不需要保留临时列,可合并步骤减少内存占用:
    cutoff_date = pd.to_datetime('2023-10-24')
    filtered_df = df[pd.to_datetime(df['s3_path'].str.extract(r'date=(\d{4}-\d{2}-\d{2})', expand=False)) < cutoff_date]
    
  • 对于超大规模数据集,可考虑使用Dask等并行处理库进一步提升速度,常规场景下Pandas矢量化操作已足够高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:43:19