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

使用列表过滤Pandas的state列时触发内存错误,求替代实现方案

Hey,碰到这种内存错误真的挺闹心的,尤其是处理大尺寸的DataFrame时。我给你几个实用的替代方案,应该能帮你绕开这个问题:

  • 先把合法缩写列表转成集合
    列表的isin()操作是逐个比对,效率偏低,而集合的查找是O(1)级别的,内存开销也更小。先把SA转换成集合再做筛选,有时候这一个小改动就能解决内存问题:

    SA_set = set(SA)
    filtered_data = ag_data[ag_data['state'].isin(SA_set)]
    

    另外别忘了先给SA去重哦,如果列表里有重复值,会额外增加不必要的比对开销。

  • 分块处理数据集
    如果你的DataFrame大到一次性处理会撑爆内存,可以试试分块处理:
    如果数据是从文件读取的,直接用pandas的分块读取功能:

    import pandas as pd
    
    chunk_size = 100000  # 根据你的内存情况调整块大小,比如10万行一块
    filtered_chunks = []
    
    for chunk in pd.read_csv('your_data_source.csv', chunksize=chunk_size):
        filtered_chunk = chunk[chunk['state'].isin(set(SA))]
        filtered_chunks.append(filtered_chunk)
    
    # 合并所有筛选后的块
    filtered_data = pd.concat(filtered_chunks, ignore_index=True)
    

    如果数据已经在内存里了,也可以手动拆分DataFrame:

    import numpy as np
    
    # 把原DataFrame拆分成10份(可根据内存调整份数)
    splits = np.array_split(ag_data, 10)
    filtered_list = []
    for split_df in splits:
        filtered_list.append(split_df[split_df['state'].isin(set(SA))])
    filtered_data = pd.concat(filtered_list, ignore_index=True)
    
  • 用map()生成布尔掩码筛选
    另一种更轻量的方式是用map()生成布尔掩码,再做筛选,内存占用可能比直接用isin()更低:

    SA_set = set(SA)
    # 生成一个布尔列,标记每行的state是否合法
    mask = ag_data['state'].map(lambda x: x in SA_set)
    filtered_data = ag_data[mask]
    
  • 用Dask处理超大规模数据
    要是你的数据大到单台机器的内存完全装不下,可以试试Dask DataFrame——它能像pandas一样操作,但会自动分块并行处理,完美适配超大数据集:

    import dask.dataframe as dd
    
    # 用Dask读取数据(支持csv、parquet等多种格式)
    ddf = dd.read_csv('your_data_source.csv')
    SA_set = set(SA)
    filtered_ddf = ddf[ddf['state'].isin(SA_set)]
    
    # 如果筛选后的结果能装下内存,就转成pandas DataFrame;否则直接保存到文件
    filtered_data = filtered_ddf.compute()
    # 或者直接保存:filtered_ddf.to_csv('filtered_data.csv', single_file=True)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:34:13