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

Pandas中df.T[:10].T与df.iloc[:,:10]的效率对比及优劣分析

DataFrame截取前N列:两种方法的效率对比与优缺点分析

针对形状为(20,20)的DataFrame截取前10列的两种写法,我们来拆解下它们的效率差异和各自的优缺点:

效率对比:df.iloc[:,:10]远胜df.T[:10].T

结论很明确:iloc的写法效率高得多,尤其是当DataFrame规模扩大时,差距会被无限放大。
原因在于:

  • df.T[:10].T需要两次转置操作,每次转置都会创建整个DataFrame的副本——第一次把20行20列转成20列20行,复制所有400个数据;取前10行后再转置回去,又要复制一次筛选后的200个数据。整个过程有两次完整的数据复制,内存和时间开销都不小。
  • df.iloc[:,:10]是pandas专门设计的位置索引切片,它直接基于原数据的位置信息进行筛选,不会创建中间副本(默认生成原数据的视图,只有后续修改数据时才会触发复制),全程只是定位数据的位置,没有多余的内存占用和计算步骤。

各自的优缺点

df.iloc[:,:10]

  • 优点:
    • 可读性拉满:iloc是pandas官方推荐的位置索引方法,:,:10直白表示“所有行,前10列”,任何人看代码都能秒懂意图。
    • 性能优异:无中间副本,大表场景下速度和内存优势极其明显。
    • 兼容性强:不管列名是什么(哪怕不是连续数字或字符串),只要按位置取列就不会出错,逻辑严谨稳定。
  • 缺点:几乎没有实质性缺点,硬要说的话,可能对完全没接触过pandas位置索引的新手,需要花1分钟理解iloc的用法,但这是学习pandas的基础内容。

df.T[:10].T

  • 优点:
    • 逻辑上能实现需求,对刚接触pandas的新手来说,可能会先想到“转置后取行再转回去”的思路,不需要额外记忆iloc的用法。
  • 缺点:
    • 效率低下:两次转置的复制操作,在大表(比如10000行10000列)场景下,内存占用和耗时会是iloc的数倍甚至数十倍。
    • 可读性差:代码需要绕个弯才能理解是取前10列,别人维护代码时需要反应一下,增加了沟通成本。
    • 扩展性差:如果要取非前N列(比如第5到15列),这种转置写法会变得非常繁琐,而iloc只需要改成iloc[:,4:15]就能轻松实现。

最佳实践

正如你推测的,虽然小表下两者效率差异可以忽略,但**iloc写法是绝对的最佳实践**——可读性、效率、扩展性都完胜转置的写法,也是pandas社区公认的标准用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:37:10