百万行股票数据集无循环分类需求:区分买入/卖出份额
大规模股票数据集高效拆分买入/卖出列方案
核心思路
用矢量化操作替代循环,利用pandas/numpy底层的C实现逻辑,处理百万级数据仅需几秒,完全规避Python循环的低效问题。
具体实现(Pandas版本)
假设你的数据集包含「类型」和「份额」两列,按以下步骤操作:
- 导入工具并读取数据
import pandas as pd # 读取数据,优先用Parquet/Feather等高效格式,CSV也可 df = pd.read_csv('stock_data.csv')
- 快速生成买入/卖出列
直接用矢量化条件赋值,无需遍历每一行:
# 初始化两列为0 df['买入'] = 0 df['卖出'] = 0 # 类型为P时,把份额赋值给买入列 df.loc[df['类型'] == 'P', '买入'] = df['份额'] # 类型非P时,把份额赋值给卖出列 df.loc[df['类型'] != 'P', '卖出'] = df['份额'] # 处理空行/空值:整行空的话两列保持0,单独份额空的话也填0 df[['买入', '卖出']] = df[['买入', '卖出']].fillna(0)
更简洁的写法(Numpy Where)
一行搞定列赋值,同样是矢量化操作:
import numpy as np df['买入'] = np.where((df['类型'] == 'P') & df['份额'].notna(), df['份额'], 0) df['卖出'] = np.where((df['类型'] != 'P') & df['份额'].notna(), df['份额'], 0)
超大规模数据优化(千万+行)
如果数据量突破内存上限,用Dask做分块并行处理:
import dask.dataframe as dd # 分块读取数据 ddf = dd.read_csv('stock_data.csv') # 同样的矢量化逻辑,Dask自动分块处理 ddf['买入'] = np.where((ddf['类型'] == 'P') & ddf['份额'].notna(), ddf['份额'], 0) ddf['卖出'] = np.where((ddf['类型'] != 'P') & ddf['份额'].notna(), ddf['份额'], 0) # 导出结果 ddf.to_csv('processed_stock_data.csv', single_file=True)
内容的提问来源于stack exchange,提问作者msj here
相关产品推荐
相关产品推荐

