我必须在 pandas 中转换一个大 DataFrame 的列子集......它非常慢。所以我做了一些测试,发现类型转换本身完成得非常快。但是,当将新转换的值归因于旧的 DataFrame 时,Pandas 似乎很慢。
然后我想出了另一个解决方案,执行联接并避免归因于运行速度相当快的列子集。
为什么 pandas 这么慢?这可能是一个错误吗?谁能重现结果?
编辑:
更多测试和用于生成 DataFrame 的代码。
最佳答案
仅添加了一个关于此的文档注释 - 请参阅 here .
基本上你不想在转换时使用loc
- 相反:
df[f] = df[f].astype(float)
此外,仅供引用,copy=False
在这里不会造成任何伤害,但它也没有任何好处 - 从整数到 float ,您将不得不分配一个新的数组。
编辑 - 这比我想象的要慢。这是一个解决方法:
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
关于python - Pandas 设置列子集慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37845884/