68

5〜10列分のデータを更新するスクリプトを持っていますが、開始csvが終了csvと同一になる場合があるため、同一のcsvfileを書き込む代わりに何もしないでください...

2 つのデータフレームを比較して同じかどうかを確認するにはどうすればよいですか?

csvdata = pandas.read_csv('csvfile.csv')
csvdata_old = csvdata

# ... do stuff with csvdata dataframe

if csvdata_old != csvdata:
    csvdata.to_csv('csvfile.csv', index=False)

何か案は?

4

9 に答える 9

76

また、DataFrame のコピーを作成するように注意する必要があります。そうしないと、csvdata_old が csvdata で更新されます (同じオブジェクトを指しているため)。

csvdata_old = csvdata.copy()

それらが等しいかどうかを確認するには、この回答のように assert_frame_equal を使用できます。

from pandas.util.testing import assert_frame_equal
assert_frame_equal(csvdata, csvdata_old)

これを次のような関数でラップできます。

try:
    assert_frame_equal(csvdata, csvdata_old)
    return True
except:  # appeantly AssertionError doesn't catch all
    return False

より良い方法についての議論がありました...

于 2013-11-12T00:40:20.467 に答える
7

これは、2 つのデータフレームの値を比較します。テーブル間で行/列の数が同じである必要があることに注意してください。

comparison_array = table.values == expected_table.values
print (comparison_array)

>>>[[True, True, True]
    [True, False, True]]

if False in comparison_array:
    print ("Not the same")

#Return the position of the False values
np.where(comparison_array==False)

>>>(array([1]), array([1]))

次に、このインデックス情報を使用して、テーブル間で一致しない値を返すことができます。インデックスがゼロなので、正しい 2 番目の位置にある 2 番目の配列を参照しています。

于 2014-09-11T15:33:33.523 に答える