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

优化对象列日期过滤性能:NYC车祸数据集提取2017年数据

高效筛选NYC车祸数据集中2017年记录的方法

嘿,这个问题我在处理大型时间序列数据集时经常碰到——事后转换日期类型再筛选确实会拖慢速度,尤其是当数据集很大的时候。给你几个亲测有效的提速方案,你可以根据自己的情况选:

  • 提前在读取CSV时解析日期
    不要先把DATE列读成object类型再事后转换,直接在pd.read_csv阶段就完成日期解析,pandas在读取时做类型转换的效率要高得多。如果你的DATE列是标准格式(比如MM/DD/YYYY或YYYY-MM-DD),可以直接用parse_dates参数:

    import pandas as pd
    # 读取时直接解析DATE列为datetime类型
    data = pd.read_csv('nyc_crashes.csv', parse_dates=['DATE'])
    # 再筛选2017年数据
    data = data[data['DATE'].dt.year == 2017]
    

    如果日期格式不标准,记得加上format参数指定格式(比如format='%m/%d/%Y'),避免pandas自动推断格式带来的额外耗时。

  • 直接通过字符串切片筛选(最快的轻量方案)
    如果你的DATE列格式完全统一(比如所有记录都是MM/DD/YYYY或DD-MM-YYYY这种年份在固定位置的格式),可以跳过datetime转换,直接对字符串切片取年份进行筛选,这会比日期转换快好几倍:

    # 假设DATE格式是MM/DD/YYYY,年份在最后四位
    data = data[data['DATE'].str[-4:] == '2017']
    # 或者转成整数比较(更严谨,避免字符串匹配的潜在问题)
    data = data[data['DATE'].str[-4:].astype(int) == 2017]
    

    注意:这个方案只适用于日期格式完全统一的情况,如果有部分记录格式不一致,会导致筛选错误。

  • 用PyArrow引擎加速读取和转换
    如果你用的是pandas 2.0+版本,可以借助PyArrow作为CSV读取引擎,它的日期解析和类型转换效率比默认的engine高很多,尤其适合超大数据集:

    data = pd.read_csv('nyc_crashes.csv', parse_dates=['DATE'], engine='pyarrow')
    data = data[data['DATE'].dt.year == 2017]
    
  • 用Dask处理超大型数据集(内存不足时用)
    如果你的CSV文件大到无法一次性加载到内存,试试用Dask来分块处理,它会自动把数据集拆分成小块并行处理,既节省内存又提升速度:

    import dask.dataframe as dd
    # 分块读取CSV并解析日期
    ddf = dd.read_csv('nyc_crashes.csv', parse_dates=['DATE'])
    # 筛选2017年数据
    ddf = ddf[ddf['DATE'].dt.year == 2017]
    # 将结果转换为pandas DataFrame(如果内存够的话)
    data = ddf.compute()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:56