在控制台中交互执行时,大型DataFrame的Pandas df.columns运行速度非常慢

qlvxas9a  于 2023-01-07  发布在  其他
关注(0)|答案(2)|浏览(104)

**编辑:**此问题经过大量编辑,因为在运行附加测试后,原始问题无效。

对于大约有100万行和13列的DataFrame,请使用以下任一方法获取列名:

print(df.columns)
df.columns
df.columns.values

非常慢(25秒)。这种情况仅当我在控制台中键入上述代码时才会发生。在缓慢执行完成后,接下来的几次运行将是即时的。
如果我保存为脚本并运行脚本,那么所有三个操作都不需要时间就可以完成。似乎是我的IDE的问题。
我正在macOS Ventura上使用DataSpell 2022.2.3和python 3.9.5以及Pandas1.4.4。

q5iwbnjs

q5iwbnjs1#

这是因为这两个print语句实际上都没有打印整个Series,而是打印了它的一个表示:

import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(10000, 4)), columns=list('ABCD'))

print("This is df.column")
print(df.A)
print("This is df.column.values")
print(df.A.values)

意志输出

This is df.column
0       35
1       76
        ..
9998    74
9999    79
Name: A, Length: 10000, dtype: int64
This is df.column.values
[35 76 91 ... 27 74 79]

正如你所看到的,第二种表示法要小得多,因此打印起来更快,而且它不打印辅助数据,如列名、类型等。
如果在进行一些简单计算时测量性能差异,您会发现差异并不大:
一个二个一个一个

mtb9vblg

mtb9vblg2#

我认为因为df.columns.values只返回Numpy数组,所以应该更快,而不是使用可能包含MultiIndex的pandas.core.indexes.base.Index考虑和扫描整个DataFrame。

相关问题