Python 将列子集设置为慢速
我必须在pandas中转换一个大数据框的一个子集列。。。非常慢。所以我做了一些测试,发现铸造本身做得非常快。但熊猫在将新铸造的值归因于旧数据帧时似乎进展缓慢 然后,我提出了另一个解决方案,执行连接并避免将属性归于运行非常快的列子集 为什么熊猫这么慢?这可能是一个错误吗?有人能重现结果吗 编辑: 更多的测试和用于生成数据帧的代码Python 将列子集设置为慢速,python,performance,pandas,dataframe,Python,Performance,Pandas,Dataframe,我必须在pandas中转换一个大数据框的一个子集列。。。非常慢。所以我做了一些测试,发现铸造本身做得非常快。但熊猫在将新铸造的值归因于旧数据帧时似乎进展缓慢 然后,我提出了另一个解决方案,执行连接并避免将属性归于运行非常快的列子集 为什么熊猫这么慢?这可能是一个错误吗?有人能重现结果吗 编辑: 更多的测试和用于生成数据帧的代码 关于这一点,只添加了一个文档注释-请参阅 基本上,你不想在施法时使用loc,而是: df[f] = df[f].astype(float) 另外,仅供参考,copy=
关于这一点,只添加了一个文档注释-请参阅 基本上,你不想在施法时使用
loc
,而是:
df[f] = df[f].astype(float)
另外,仅供参考,copy=False
在这里没有任何危害,但也没有任何好处-从int到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
你的DF在施法前有哪些数据类型?数值列中是否有NaN?在强制转换子集中的所有列之前,请将np.int64作为数据类型。没有NaN的,Humm试过从浮点到int,反之亦然。按照你的建议,我也尝试了不使用loc(虽然没有包括在图片上),但仍然很慢。我在问题中添加了基准。谢谢你提供的关于复制的信息,我不确定它到底是如何工作的:)我的计时被关闭了,这比我希望的要慢(你仍然不应该使用
loc
来施法)。这有点像黑客,但我已经用更快的方法更新了我的答案,这会造成问题。另外,为了将来的参考,请发布可复制粘贴的代码,而不是图像。简洁的解决方案:)。不知道如何将笔记本代码+输出粘贴到SO。。我在上班,所以我得快点。下次就可以了。谢谢