2017-04-26 5 views
2

pandasのデータフレームへの書き込みでは、this answerthis answerの2通りの方法があります。パンダのset_valueと=の相違点

我々は

  • df[r][c].set_value(r,c,some_value)
  • df.iloc[r][c] = some_valueの方法の方法を持っています。

違いは何ですか?どちらが速いの?いずれかのコピーですか?

+0

それはスピードの問題だように、それが見えます。 – pshep123

答えて

2

差は、代入演算子は、既存DataFrameオブジェクトに値を代入しながらset_valueは、オブジェクトを返すであることです。代入演算子は、データを変更する一方

set_valueを呼び出した後、あなたは潜在的に(缶「参照」互いにDataFrameオブジェクトのように、これは必ずしもあなたがデータのコピーを2つ持っていますという意味ではありません)2つの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は(私には)本当に明確ではない:

戻り値:

フレーム:自分の投稿の答えパーDATAFRAME

ラベルのペアが含まれている場合は、データフレームを呼び出すへの参照になり、そうでない場合は、新しいオブジェクト

関連する問題