Lebih
Pilih DataFrame baris antara dua tanggal
Saya menciptakan DataFrame dari csv sebagai berikut:
stock = pd.read_csv('data_in/' + filename + '.csv', skipinitialspace=True)
Yang DataFrame memiliki kolom tanggal. Apakah ada cara untuk membuat yang baru DataFrame (atau hanya menimpa yang sudah ada) yang hanya berisi baris-baris dengan nilai-nilai tanggal yang jatuh dalam rentang tanggal yang ditentukan atau antara dua tanggal yang telah ditentukan, nilai-nilai?
163
7
Ada dua solusi yang mungkin:
df.loc[mask]
df[start_date : end_date]
Menggunakan boolean masker:
Memastikan
df['tanggal']
adalah Seri dengan dtypedatetime64[ns]
:Membuat boolean masker.
start_date
danend_date
dapatdatetime.datetime ini,
np.datetime64 ini, `pd.Timestamp ini, atau bahkan datetime string:Saya merasa pilihan terbaik akan menggunakan pemeriksaan langsung daripada menggunakan loc fungsi:
Anda juga dapat menggunakan
antara
:Anda dapat menggunakan
isin
metodetanggal
kolom seperti begitudf[df["tanggal"].isin(pd.date_range(start_date, end_date))]
Catatan: Ini hanya bekerja dengan tanggal (sebagai pertanyaan yang meminta) dan yang tidak timestamps.
Contoh:
yang memberikan
Menjaga solusi sederhana dan pythonic, saya akan menyarankan anda untuk mencoba ini.
Dalam kasus jika anda akan sering melakukan ini solusi terbaik untuk set pertama kolom tanggal sebagai indeks yang akan mengkonversi kolom di DateTimeIndex dan menggunakan kondisi berikut untuk mengiris setiap rentang tanggal.
Saya memilih untuk tidak mengubah
df
.Pilihan untuk mengambil
index
dariawal
danakhir
tanggal:yang menghasilkan:
Dengan pengujian
panda
versi0.22.0
anda sekarang dapat menjawab pertanyaan ini lebih mudah dengan banyak kode yang dapat dibaca dengan menggunakanantara
.Let's mengatakan anda ingin ambil antara tanggal 27 Nov 2018 dan 15 Januari 2019:
Perhatikan inklusif argumen. *sangat membantu ketika anda ingin menjadi yang eksplisit tentang jangkauan anda. pemberitahuan ketika diatur ke Benar, kita kembali 27 Nov 2018 serta:
Metode ini juga lebih cepat dari yang telah disebutkan sebelumnya
isin
metode:Namun, ini adalah tidak lebih cepat dari saat ini jawaban yang diterima, yang disediakan oleh unutbu, hanya jika masker sudah dibuat. tapi jika masker yang dinamis dan harus dipindahkan lebih dari dan di atas, metode saya mungkin lebih efisien: