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

如何高效从大型Pandas DataFrame采样?现有代码卡顿求助

解决DataFrame采样卡顿的优化方案

你的问题出在重复操作上:先通过sample生成采样后的DataFrame再提取索引,接着又用loc重新定位原DataFrame,这相当于对大表做了两次遍历/索引查找,自然会慢。

直接用下面两种更高效的方式:

方式一:直接使用sample的结果(最简便)

sample方法本身就会返回采样后的DataFrame,不需要额外用loc二次索引,代码简化为:

import numpy as np

np.random.seed(42)
X = X_it.sample(frac=0.1)

这样一步到位,省去了索引提取和二次查找的开销,速度会快很多。

方式二:生成随机整数索引用iloc(适合整数索引场景)

如果你的DataFrame用的是默认的连续整数索引(RangeIndex),可以直接用numpy生成随机索引,再通过iloc定位,iloc的整数定位比loc的标签定位效率更高:

import numpy as np

np.random.seed(42)
total_rows = X_it.shape[0]
sample_size = int(total_rows * 0.1)
sel_idx = np.random.choice(total_rows, size=sample_size, replace=False)
X = X_it.iloc[sel_idx]

这里用np.random.choice直接生成要采样的行号,避免了sample方法生成临时DataFrame的额外开销,对于超大型表更友好。

另外补充一点:如果你的DataFrame索引不是连续整数,或者有重复标签,loc的查找会因为要匹配标签而变慢,这时候优先用方式一或者确保用整数索引配合iloc。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:54:51