在pandas中,set_value和=有什么区别?

3
pandas 中写入数据框时,我们有几种方法可供选择,如此答案此答案所提供的。我们有以下两种方法:
  • df[r][c].set_value(r,c,some_value)
  • df.iloc[r][c] = some_value
这两种方法有什么区别?哪个更快?它们是否都是复制呢?

根据您发布的答案,看起来这是一个速度问题。 - elPastor
1个回答

3
区别在于set_value会将一个对象作为返回值,而赋值运算符则将值分配给现有的DataFrame对象。
在调用set_value后,您可能会拥有两个DataFrame对象(这并不一定意味着您将拥有数据的两个副本,因为DataFrame对象可以相互"引用"),而赋值运算符将更改单个DataFrame对象中的数据。
看起来使用set_value更快,因为它可能针对该用例进行了优化,而赋值方法将生成中间数据片段:
In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: df=pd.DataFrame(np.random.rand(100,100))

In [4]: %timeit df[10][10]=7
The slowest run took 6.43 times longer than the fastest. This could mean that an intermediate result is being cached
10000 loops, best of 3: 89.5 µs per loop

In [5]: %timeit df.set_value(10,10,11)
The slowest run took 10.89 times longer than the fastest. This could mean that an intermediate result is being cached
100000 loops, best of 3: 3.94 µs per loop

set_value 方法的返回值可能是一个副本,但是 文档 并没有很清楚地说明(对我来说):

返回值:

frame : DataFrame

如果标签对存在于调用的 DataFrame 中,则返回对该 DataFrame 的引用;否则返回一个新对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接