Saya telah mengambil Seri saya dan memaksanya ke kolom tanggal waktu dtype = datetime64[ns]
(meskipun hanya membutuhkan resolusi hari ... tidak yakin bagaimana mengubahnya).
import pandas as pd
df = pd.read_csv('somefile.csv')
column = df['date']
column = pd.to_datetime(column, coerce=True)
tetapi merencanakan tidak berhasil:
ipdb> column.plot(kind='hist')
*** TypeError: ufunc add cannot use operands with types dtype('<M8[ns]') and dtype('float64')
Saya ingin memplot histogram yang hanya menunjukkan jumlah tanggal berdasarkan minggu, bulan, atau tahun .
Tentunya ada cara untuk melakukan ini pandas
?
python
pandas
matplotlib
time-series
lollercoaster
sumber
sumber
Jawaban:
Diberikan df ini:
dan, jika belum demikian:
Untuk menunjukkan hitungan tanggal per bulan:
.dt
memungkinkan Anda mengakses properti datetime.Yang akan memberi Anda:
Anda dapat mengganti bulan demi tahun, hari, dll.
Jika Anda ingin membedakan tahun dan bulan misalnya, lakukan saja:
Pemberian yang mana:
Apakah itu yang Anda inginkan? Apakah ini jelas?
Semoga ini membantu !
sumber
date
atau diDate
sini adalah nama kolom, jadi jika kolom Anda dengan tanggal disebut foo, itu akan menjadi:df.foo.dt.month
groupby
menggunakan kombinasi dua atribut data kolom (misalnya: tahun dan tanggal)?Saya pikir resample mungkin apa yang Anda cari. Dalam kasus Anda, lakukan:
Itu hanya melakukan penghitungan dan bukan plot, jadi Anda kemudian harus membuat plot sendiri.
Lihat posting ini untuk detail lebih lanjut tentang dokumentasi dokumentasi resample panda
Saya mengalami masalah yang sama seperti Anda. Semoga ini membantu.
sumber
how
sudah ditinggalkan. Sintaks baru adalahdf.resample('1M').count()
Contoh yang diberikan
Kode Contoh
sumber
Saya dapat mengatasi ini dengan (1) membuat plot dengan matplotlib daripada menggunakan dataframe secara langsung dan (2) menggunakan
values
atribut. Lihat contoh:Ini tidak berfungsi jika saya tidak menggunakannya
values
, tetapi saya tidak tahu mengapa ini berhasil.sumber
Berikut adalah solusi saat Anda hanya ingin memiliki histogram seperti yang Anda harapkan. Ini tidak menggunakan groupby, tetapi mengonversi nilai datetime menjadi integer dan mengubah label pada plot. Beberapa perbaikan dapat dilakukan untuk memindahkan label centang ke lokasi yang rata. Juga dengan pendekatan plot estimasi kepadatan kernel (dan plot lainnya) juga dimungkinkan.
sumber
Saya pikir untuk memecahkan masalah itu, Anda dapat menggunakan kode ini, itu mengubah tipe tanggal menjadi tipe int:
untuk mendapatkan tanggal saja, Anda dapat menambahkan kode ini:
sumber
Saya hanya mengalami masalah dengan ini juga. Saya membayangkan bahwa karena Anda bekerja dengan tanggal, Anda ingin mempertahankan urutan kronologis (seperti yang saya lakukan.)
Solusinya adalah
Tolong, jika ada yang tahu cara yang lebih baik, silakan angkat bicara.
EDIT: untuk jean di atas, berikut adalah contoh datanya [Saya secara acak mengambil sampel dari kumpulan data lengkap, karenanya data histogram sepele.]
Keluaran:
sumber
Semua jawaban ini tampak terlalu rumit, paling tidak dengan panda 'modern', hanya ada dua baris.
sumber
DataFrame
, tetapi tidak jika yang Anda miliki hanyalah aSeries
. Apakah Anda akan mempertimbangkan untuk menambahkan catatan tentang kasus itu?