Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列子集设置为慢速_Python_Performance_Pandas_Dataframe - Fatal编程技术网

Python 将列子集设置为慢速

Python 将列子集设置为慢速,python,performance,pandas,dataframe,Python,Performance,Pandas,Dataframe,我必须在pandas中转换一个大数据框的一个子集列。。。非常慢。所以我做了一些测试,发现铸造本身做得非常快。但熊猫在将新铸造的值归因于旧数据帧时似乎进展缓慢 然后,我提出了另一个解决方案,执行连接并避免将属性归于运行非常快的列子集 为什么熊猫这么慢?这可能是一个错误吗?有人能重现结果吗 编辑: 更多的测试和用于生成数据帧的代码 关于这一点,只添加了一个文档注释-请参阅 基本上,你不想在施法时使用loc,而是: df[f] = df[f].astype(float) 另外,仅供参考,copy=

我必须在pandas中转换一个大数据框的一个子集列。。。非常慢。所以我做了一些测试,发现铸造本身做得非常快。但熊猫在将新铸造的值归因于旧数据帧时似乎进展缓慢

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

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

编辑: 更多的测试和用于生成数据帧的代码


关于这一点,只添加了一个文档注释-请参阅

基本上,你不想在施法时使用
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。。我在上班,所以我得快点。下次就可以了。谢谢