我必须在pandas中投射一个大型DataFrame的列的子集......它非常慢。所以我做了一些测试,发现铸件本身很快就完成了。但是当将新渲染的值归因于旧的DataFrame时,Pandas似乎很慢。
然后我提出了另一个执行连接的解决方案,并避免归因于运行速度非常快的列子集。
为什么熊猫这么慢?这可能是个错误吗?有人可以重现结果吗?
更多测试和用于生成DataFrame的代码。
答案 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