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 的引用;否则返回一个新对象。