逐行创建pandas DataFrame,哪种实现方式效率更高?
百万条API数据转DataFrame:哪种方法效率最高?
我需要从API逐行下载超百万条数据并转为pandas DataFrame,目前的做法是先创建列表,把所有数据追加到列表后再转成DataFrame(示例代码如下)。想请教:
- 直接创建DataFrame后逐行用append/concat
- 用numpy ndarray转DataFrame
- 当前的列表追加后转DataFrame
这三种方式哪种更快?我感觉当前的列表方法效率更高,这个判断对吗?
示例代码:
data_list = [] requested_data = (API CALL HERE) for x in requested_data: data_list.append(x) data_df = pd.DataFrame(data_list)
结论先行
你的判断完全正确——先收集所有数据到列表再一次性转DataFrame是效率最高的方式,另外两种方法的速度会慢很多,尤其是百万级数据量下差距会非常明显。
为什么列表法最快?
- 列表是Python原生数据结构,
append操作的均摊时间复杂度是O(1),几乎没有额外开销,就是单纯的内存数据追加。 - pandas的DataFrame是带索引、列类型等元数据的复杂结构,逐行append/concat本质上每次都要新建一个DataFrame,要处理索引对齐、类型校验、内存重新分配等额外操作,百万次循环下来,这些累加的开销会让速度慢几十甚至上百倍。
- 用numpy ndarray中转的话,虽然ndarray内存是连续的,但如果逐行添加,同样要面临内存扩容的问题(除非提前知道数据长度预分配内存),而且多了列表转ndarray的步骤,效率反而不如直接列表转DataFrame。
额外优化建议
如果API支持批量请求,尽量别逐行下载——哪怕一次拉取1000条再追加到列表,也比逐行拉取快得多,毕竟网络请求的开销往往比本地数据处理更大。
内容的提问来源于stack exchange,提问作者Eboyer
相关产品推荐
相关产品推荐

