Saya memiliki DataFrame Pandas dengan kolom 'tanggal'. Sekarang saya perlu memfilter semua baris dalam DataFrame yang memiliki tanggal di luar dua bulan ke depan. Intinya, saya hanya perlu mempertahankan baris yang ada dalam dua bulan ke depan.
Apa cara terbaik untuk mencapai ini?
query
sini juga.df.query('20130101 < date < 20130201')
..loc
dan.ix
) dan kolom dalam contoh Anda tidak setara.df.ix['2014-01-01':'2014-02-01']
termasuk2014-02-01
sementaradf[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
tidak termasuk2013-02-01
, itu hanya akan cocok dengan baris hingga2013-01-31
.Jawaban sebelumnya tidak benar dalam pengalaman saya, Anda tidak bisa memberikannya string sederhana, harus menjadi objek datetime. Begitu:
sumber
Dan jika tanggal Anda distandarisasi dengan mengimpor paket datetime, Anda cukup menggunakan:
Untuk menstandarkan string tanggal Anda menggunakan paket datetime, Anda dapat menggunakan fungsi ini:
sumber
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
.Jika kolom datetime Anda memiliki tipe datetime Pandas (misalnya
datetime64[ns]
), untuk pemfilteran yang benar, Anda memerlukan objek pd.Timestamp , misalnya:sumber
Jika tanggal dalam indeks maka cukup:
sumber
Anda dapat menggunakan pd.Timestamp untuk melakukan kueri dan referensi lokal
dengan output
Lihat dokumentasi panda untuk DataFrame.query , khususnya penyebutan tentang
@
awalan udsing variabile yang dirujuk . Dalam hal ini kami referensipd.Timestamp
menggunakan alias lokalts
untuk dapat menyediakan string timestampsumber
Jadi ketika memuat file data csv, kita perlu mengatur kolom tanggal sebagai indeks sekarang seperti di bawah ini, untuk memfilter data berdasarkan rentang tanggal. Ini tidak diperlukan untuk metode yang sekarang sudah tidak digunakan lagi: pd.DataFrame.from_csv ().
Jika Anda hanya ingin menampilkan data selama dua bulan dari Januari hingga Februari, mis. 2020-01-01 hingga 2020-02-29, Anda dapat melakukannya:
Ini telah diuji bekerja untuk Python 3.7. Semoga Anda menemukan ini berguna.
sumber
index_col
harusstring
bukan daftar.mydata = pd.read_csv('mydata.csv',index_col='date')
Bagaimana kalau menggunakan
pyjanitor
Ini memiliki fitur keren.
Setelah
pip install pyjanitor
sumber
Cara terpendek untuk memfilter dataframe Anda berdasarkan tanggal: Mari kita anggap kolom tanggal Anda adalah tipe datetime64 [ns]
sumber
Saya belum diizinkan menulis komentar apa pun, jadi saya akan menulis jawaban, jika seseorang akan membaca semuanya dan mencapai yang ini.
Jika indeks dataset adalah datetime dan Anda ingin memfilter hanya dengan (misalnya) bulan, Anda dapat melakukan hal berikut:
Itu akan menyaring dataset untuk Anda pada bulan Maret.
sumber
Jika Anda telah mengonversi string ke format tanggal menggunakan pd.to_datetime, Anda bisa menggunakan:
df = df[(df['Date']> "2018-01-01") & (df['Date']< "2019-07-01")]
sumber
Anda bisa memilih rentang waktu dengan melakukan: df.loc ['start_date': 'end_date']
sumber