相关疑难解决方法(0)

在Python pandas中向现有DataFrame添加新列

我有以下索引的DataFrame与命名列和行不连续数字:

          a         b         c         d
2  0.671399  0.101208 -0.181532  0.241273
3  0.446172 -0.243316  0.051767  1.577318
5  0.614758  0.075793 -0.451460 -0.012493
Run Code Online (Sandbox Code Playgroud)

我想'e'在现有数据框中添加一个新列,并且不希望更改数据框中的任何内容(即,新列始终与DataFrame具有相同的长度).

0   -0.335485
1   -1.166658
2   -0.385571
dtype: float64
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的版本join,append,merge,但我没有得到我想要的结果,只在最错误.如何e在上面的示例中添加列?

python dataframe pandas chained-assignment

887
推荐指数
23
解决办法
182万
查看次数

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万
查看次数