Saya menemukan masalah yang menarik. Saya memiliki kumpulan data dengan tiga kolom dengan tanggal yang disimpan sebagai bilangan bulat dalam format YYYYMM. Pertama, saya mencoba mengonversinya menjadi datetime, tetapi beberapa tanggal berada di luar batas bawah 1677-09-21 untuk tipe data datetime. Jadi saya menggunakan solusi dalam dokumentasi Dengan demikian:

def conv(x):
    return pd.Period( year=x // 10000, month=x // 100 % 100, day=x % 100, freq='D' )

# First, append '01' to create format YYYYMMDD, then apply conversion function
columns = ['indep_date', 'cow_system_ind_date', 'gw_system_ind_date']
for column in columns:
   icow[column] = ( icow[column].astype('str') + '01' ).astype('int').apply(conv)

Ini semua bekerja dengan baik. Namun, setelah menerapkan fungsi ini, saya tidak dapat lagi memilih kerangka data saya dengan menanyakan kolom apa pun. Jika saya mencoba salah satu dari ini, kernel Jupyter lumpuh:

icow.query( 'column != 200' )
icow[ icow['col1'] != icow['col2'] ]
icow[ icow['col1'].ne( icow['col2'] ) ]

Saya mencoba berbagai metode lain, tetapi semuanya mengakibatkan crash dan restart kernel. Hal yang menarik adalah jika saya menjalankan bagian internal saja, itu berjalan dengan baik. Contohnya:

icow['col1'] != icow['col2']

Mengembalikan serangkaian nilai Benar/Salah dengan benar. Segera setelah saya membungkusnya untuk mencoba mendapatkan kembali pilihan kerangka data, crash.

Jika saya menghapus kolom periode[D] (atau melewatkan konversi), kueri saya berjalan dengan baik. Adakah yang tahu mengapa memiliki tipe data periode[D] ini dalam kerangka data saya akan menyebabkan masalah ini dan bagaimana saya bisa memperbaikinya?

0
skustes 20 September 2019, 01:51

1 menjawab

Jawaban Terbaik

Terpecahkan: Masalahnya adalah salah satu dari tiga kolom tanggal berisi sejumlah entri dengan -9 dalam kumpulan data asli. Menariknya, fungsi untuk mengonversi representasi string ke Periode tidak gagal, tetapi itu merusak kerangka data dalam beberapa cara yang membuat kueri terhadap kolom mana pun menyebabkan kerusakan kernel. Dengan menyetel tanggal -9 ke tanggal yang jauh dari 0001-01-01, semuanya berfungsi dengan baik.

0
skustes 20 September 2019, 16:24