2
在写入pandas
的数据框时,我们看到我们有几种方法来完成它,如this answer和this answer所提供的。set_value和= pandas之间有什么区别
我们的
df[r][c].set_value(r,c,some_value)
方法和df.iloc[r][c] = some_value
的方法。
有什么区别?哪个更快?要么是副本?
在写入pandas
的数据框时,我们看到我们有几种方法来完成它,如this answer和this answer所提供的。set_value和= pandas之间有什么区别
我们的
df[r][c].set_value(r,c,some_value)
方法和df.iloc[r][c] = some_value
的方法。有什么区别?哪个更快?要么是副本?
所不同的是set_value
是返回一个对象,而赋值操作符分配值到现有DataFrame
对象。
调用set_value
后,你将可能有2个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是不是真的清楚(我):
返回:
帧:数据帧
如果标签对包含,将参考调用数据帧,否则一个新的对象
每自己贴的答案,它看起来就像是速度的问题。 – pshep123