在写入pandas
中的数据框时,我们发现有两种方法可以执行此操作,由this answer和this answer提供。
我们有
的方法df[r][c].set_value(r,c,some_value)
以及df.iloc[r][c] = some_value
。 有什么区别?哪个更快?是副本吗?
答案 0 :(得分: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
的结果可能是副本,但documentation对我来说并不是很清楚(<}}:
返回:
frame:DataFrame
如果包含标签对,则将引用调用DataFrame,否则为新对象