Pandas设置列子集慢

时间:2016-06-15 21:14:38

标签: python performance pandas dataframe

我必须在pandas中投射一个大型DataFrame的列的子集......它非常慢。所以我做了一些测试,发现铸件本身很快就完成了。但是当将新渲染的值归因于旧的DataFrame时,Pandas似乎很慢。

然后我提出了另一个执行连接的解决方案,并避免归因于运行速度非常快的列子集。

为什么熊猫这么慢?这可能是个错误吗?有人可以重现结果吗?

slow pandas

编辑:

更多测试和用于生成DataFrame的代码。

slow pandas 2

1 个答案:

答案 0 :(得分:1)

此处只添加了一份文档说明 - 请参阅here

基本上你不想在投射时使用loc - 而是:

df[f] = df[f].astype(float)

另外,copy=False在这里没有任何伤害,但它也没有任何好处 - 从int到浮动你将不得不分配一个新数组。

编辑 - 这比我想象的要慢。这是一种解决方法:

In [61]: df = pd.DataFrame(np.random.randint(0,1000, size=(10000, 1026)))

In [62]: f = list(range(1024))

In [63]: def cast(s):
    ...:     if s.name in f:
    ...:         return s.astype(float)
    ...:     else:
    ...:         return s

In [64]: %timeit df.apply(cast)
1 loop, best of 3: 389 ms per loop