相关疑难解决方法(0)

iterrows有性能问题吗?

我注意到从熊猫使用iterrows时性能非常差.

这是其他人经历过的事情吗?它是否特定于iterrows,并且对于特定大小的数据(我正在使用2-3百万行),是否应该避免此功能?

关于GitHub的讨论使我相信它是在数据帧中混合dtypes时引起的,但是下面的简单示例表明它甚至在使用一个dtype(float64)时也存在.我的机器需要36秒:

import pandas as pd
import numpy as np
import time

s1 = np.random.randn(2000000)
s2 = np.random.randn(2000000)
dfa = pd.DataFrame({'s1': s1, 's2': s2})

start = time.time()
i=0
for rowindex, row in dfa.iterrows():
    i+=1
end = time.time()
print end - start
Run Code Online (Sandbox Code Playgroud)

为什么矢量化操作如此快速应用?我想也必须有一些逐行迭代.

在我的情况下,我无法弄清楚如何不使用iterrows(这将为将来的问题保存).因此,如果您一直能够避免这种迭代,我将不胜感激.我正在基于单独数据帧中的数据进行计算.谢谢!

---编辑:我想要运行的简化版本已添加到下面---

import pandas as pd
import numpy as np

#%% Create the original tables
t1 = {'letter':['a','b'],
      'number1':[50,-10]}

t2 = {'letter':['a','a','b','b'],
      'number2':[0.2,0.5,0.1,0.4]}

table1 = pd.DataFrame(t1)
table2 = pd.DataFrame(t2)

#%% Create the body of the …
Run Code Online (Sandbox Code Playgroud)

python iteration performance pandas

82
推荐指数
5
解决办法
3万
查看次数

使用 lambda 以字符串开头时替换 DataFrame 列中的值

我有一个数据框:

import pandas as pd
import numpy as np
x = {'Value': ['Test', 'XXX123', 'XXX456', 'Test']}
df = pd.DataFrame(x)
Run Code Online (Sandbox Code Playgroud)

我想使用 lambda 用 np.nan 替换以 XXX 开头的值。

我尝试了很多替换、应用和映射的方法,我能做的最好的是 False, True, True, False。

下面的工作,但我想知道一个更好的方法来做到这一点,我认为应用,替换和 lambda 可能是一个更好的方法来做到这一点。

df.Value.loc[df.Value.str.startswith('XXX', na=False)] = np.nan
Run Code Online (Sandbox Code Playgroud)

lambda replace startswith apply pandas

3
推荐指数
2
解决办法
1万
查看次数

标签 统计

pandas ×2

apply ×1

iteration ×1

lambda ×1

performance ×1

python ×1

replace ×1

startswith ×1