Python高效更新CSV文件列:大文件空值条件更新优化需求
高效处理大型CSV空值填充的优化方案
你已经搞定了核心逻辑,针对5GB这种级别的大CSV,确实有不少优化空间能让处理更快、更省内存,下面分享几个亲测好用的方案:
1. Pandas分块读取处理(原生轻量方案)
如果不想引入新库,Pandas自带的分块读取就很实用——用chunksize参数把大文件拆成一小块一小块处理,不用一次性把整个5GB文件塞进内存,处理完一块就写入结果,完美规避内存爆掉的问题。
示例代码:
import pandas as pd # 定义单块的填充逻辑 def process_chunk(chunk): # 筛选出center为空且account是DNA/BBA的行 fill_mask = chunk['center'].isna() & chunk['account'].isin(['DNA', 'BBA']) chunk.loc[fill_mask, 'center'] = '0070' return chunk # 分块大小根据你的内存情况调整,比如1万行一块 chunk_size = 10000 output_path = 'filled_large_data.csv' # 第一次写入保留表头,后续追加时跳过表头 first_write = True for chunk in pd.read_csv('your_large_file.csv', chunksize=chunk_size): processed_chunk = process_chunk(chunk) processed_chunk.to_csv( output_path, mode='a', header=first_write, index=False ) first_write = False
2. 用NumPy向量化加速(内存足够时)
如果你的内存能装下整个文件,用NumPy的向量化操作替代Pandas的条件判断,速度会更快——向量化操作是底层C实现,比逐行处理快一个量级。
示例代码:
import pandas as pd import numpy as np # 直接加载整个文件(内存够的话) df = pd.read_csv('your_large_file.csv') # 组合条件:center为空 + account是DNA/BBA fill_condition = np.logical_and( df['center'].isna(), df['account'].isin(['DNA', 'BBA']) ) # 批量填充 df['center'] = np.where(fill_condition, '0070', df['center']) # 保存结果 df.to_csv('filled_large_data.csv', index=False)
要是内存不够,这个向量化逻辑也能放到上面的分块处理函数里,一样能提速。
3. Dask并行处理(超大规模数据首选)
如果以后遇到更大的文件(比如几十GB),Dask绝对是福音——它的DataFrame接口和Pandas几乎一模一样,但能自动拆分任务并行处理,不用操心内存限制,TB级数据都能搞定。
示例代码:
import dask.dataframe as dd # 用Dask读取CSV,自动分块 ddf = dd.read_csv('your_large_file.csv') # 应用填充逻辑,语法和Pandas几乎一致 ddf['center'] = ddf['center'].mask( ddf['center'].isna() & ddf['account'].isin(['DNA', 'BBA']), '0070' ) # 计算并保存成单个CSV文件 ddf.to_csv('filled_dask_data.csv', single_file=True, index=False)
4. 指定数据类型减少内存占用
读取CSV时提前指定列的dtype,能大幅压缩内存占用——比如account列如果唯一值不多,可以设为category类型,center列如果是固定格式的字符串直接指定str,这样你就能加载更大的分块,甚至一次性装下整个文件。
示例:
# 定义各列的数据类型 dtype_config = { 'account': 'category', 'center': str } # 按指定类型读取 df = pd.read_csv('your_large_file.csv', dtype=dtype_config)
这些方案里,分块读取是最容易上手的原生方案,Dask则是处理超大规模数据的终极选择,你可以根据自己的内存配置和需求来挑~
内容的提问来源于stack exchange,提问作者iprof0214
相关产品推荐
相关产品推荐

