python - Pandas 设置列子集慢

标签 python performance pandas dataframe

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

然后我想出了另一个解决方案,执行联接并避免归因于运行速度相当快的列子集。

为什么 pandas 这么慢?这可能是一个错误吗?谁能重现结果?

slow pandas

编辑:

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

slow pandas 2

最佳答案

仅添加了一个关于此的文档注释 - 请参阅 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/

相关文章:

python - interpolate.splev 错误 : 'Lengths of the first three arguments (x,y,w) must be equal'

c# - 从另一个数据表更新数据表中数据的有效方法

python - Pandas 截断的就地版本?

python - 在列与特定值匹配的数据框中获取整数行索引

javascript - 无法将数据从 React Native 发送到 Flask

java - 使用 Spring Boot 负载测试 tomcat 7 时出现连接异常

python - 如何在 Python 中使用带有条件的 Groupby

pandas - 重命名列后得到keyerror

python - 如何根据字典中的键/值增加 Python Pandas DataFrame

c++ - 为什么调用 vector.reserve(required + 1) 比 vector.reserve(required) 快?