私は自分のコードに非常に微妙なバグを発見しました。私は頻繁に分析のデータフレームから行を削除します。これは、インデックスのギャップを残しますので、私はいけない場合、私は、私はしかしインデックスをリセットするのはいつですか? loc vs iloc(インデックスのギャップ)?ベストプラクティス?
for row in xrange (df0.shape [0]):
print df0.loc [row]
print df0.iloc [row]
と次の機能に引き続き次に
df0 = df0.reset_index (drop = True)
で終わりでインデックスをリセットすることにより、すべての機能を終了してみてくださいインデックスを正しくリセットすると、最初の行のインデックスは192になる可能性があります。192のインデックスは行番号0と同じではありません。これにより、df0.loc [row]がインデックス0の行にアクセスし、 df0.iloc [row]がインデックス192を持つ行にアクセスしています。これは非常に奇妙なバグを引き起こしました。行0を更新しようとすると、代わりにインデックス192が更新されます。またはその逆。
しかし実際には、私はdf0.loc()またはdf0.iloc()関数を使用しません。遅すぎるためです。私のコードは、値にアクセスするときの最も速い関数なので、df0.get_value(...)関数とdf0.set_value(...)関数ではじまります。
そして、関数のいくつかはインデックスでアクセスされ、その他は行番号でアクセスされるようです。私は混乱しています。誰かが私に説明することはできますか?ベストプラクティスは何ですか?いくつかの関数はインデックスを使って値にアクセスし、他の関数は行番号を使用していますか?私は何かを誤解したことがありますか?私はいつもreset_index()をできるだけ頻繁に行うべきですか?それとも決してしないの?
編集:要約すると:私は手作業でいくつかの行をマージして、指標に隙間ができるようにします。他の関数では、各行を繰り返し計算します。ただし、インデックスをリセットしても、インデックスをリセットしないと他の計算結果が表示されます。どうして?それが私の問題です。
ilocは、インデックスラベルの内容に関係なく動作します。 iloc(整数位置)は、インデックス内の整数位置に基づいて行を取得します。 –