Saya memiliki beberapa kerangka data (sekitar 37) dan ingin membandingkan nama kolom dari kerangka data ini sehingga saya tahu semuanya memiliki urutan kolom dan kolom yang sama. Kerangka data disimpan sebagai daftar objek (misalnya tbl[0] adalah kerangka data pertama, tbl[1] adalah yang kedua dan seterusnya).

Saya menulis blok kode berikut yang akan mengambil setiap kolom kerangka data saya (tbl) dan membandingkannya dengan kolom kerangka data lain, jika ada perbedaan maka indeks kerangka data ini ditambahkan ke daftar 2D, yang nantinya dapat saya ingat kembali lihat di mana kolom tidak cocok.

a = [[]]
for i in range(0,len(tbl)):
    for j in range(i+1, len(tbl)):
        if(~(tbl[i].columns.equals(tbl[j].columns))):
            a.append([i, j])

Tetapi ketika saya menjalankan kode di atas, itu menambahkan semua indeks kerangka data yang saya bandingkan. Apakah ada yang salah yang saya lakukan di sini?

Contoh:

tbl = []

for i in range(0,3):
    tbl.append(pd.DataFrame({'a':[1,2,3],'b':[3,4,5], 'c':[7,8,3], 'd':[1,5,3]}))

a = [[]]
for i in range(0,len(tbl)):
    for j in range(i+1, len(tbl)):
        if(~(tbl[i].columns.equals(tbl[j].columns))):
            a.append([i, j])

Demi pertanyaan ini, saya telah membuat 3 kerangka data dummy yang memiliki nama kolom yang sama (a, b, c, d). Ketika saya membandingkan nama kolom menggunakan kode yang disebutkan sebelumnya, saya mendapatkan output berikut:

[[], [0, 1], [0, 2], [1, 2]]

Bukankah seharusnya saya mendapatkan daftar kosong? Apa yang saya lakukan salah di sini?

1
Hanif 1 April 2019, 12:59

1 menjawab

Jawaban Terbaik

Gunakan if not untuk bekerja dengan skalar bool:

print (~True)
-2

a = [[]]
for i in range(0,len(tbl)):
    for j in range(i+1, len(tbl)):
        if not (tbl[i].columns.equals(tbl[j].columns)):
            a.append([i, j])

print (a)
[[]]
1
jezrael 1 April 2019, 10:51