Tomé mi Serie y la forcé a una columna de fecha y hora de dtype = datetime64[ns]
(aunque solo necesito una resolución de día ... no estoy seguro de cómo cambiar).
import pandas as pd
df = pd.read_csv('somefile.csv')
column = df['date']
column = pd.to_datetime(column, coerce=True)
pero trazar no funciona:
ipdb> column.plot(kind='hist')
*** TypeError: ufunc add cannot use operands with types dtype('<M8[ns]') and dtype('float64')
Me gustaría trazar un histograma que solo muestre el recuento de fechas por semana, mes o año .
Seguramente hay una forma de hacer esto en pandas
?
python
pandas
matplotlib
time-series
lollercoaster
fuente
fuente
Respuestas:
Dado este df:
y, si aún no es el caso:
Para mostrar el recuento de fechas por mes:
.dt
le permite acceder a las propiedades de fecha y hora.Que te dará:
Puede reemplazar mes por año, día, etc.
Si desea distinguir año y mes, por ejemplo, simplemente haga:
Lo que da:
¿Era lo que querías? ¿Está claro esto?
Espero que esto ayude !
fuente
date
oDate
aquí están los nombres de las columnas, por lo que si su columna con fechas se llama foo, sería:df.foo.dt.month
groupby
de combinar dos atributos de los datos de una columna (por ejemplo, año y fecha)?Creo que remuestrear puede ser lo que estás buscando. En su caso, haga:
Es solo hacer el conteo y no la trama, entonces tienes que hacer tus propias tramas.
Consulte esta publicación para obtener más detalles sobre la documentación de remuestrear pandas remuestrear la documentación
Me he encontrado con problemas similares a los tuyos. Espero que esto ayude.
fuente
how
es obsoleto. La nueva sintaxis esdf.resample('1M').count()
Ejemplo renderizado
Código de ejemplo
fuente
Pude solucionar esto (1) trazando con matplotlib en lugar de usar el marco de datos directamente y (2) usando el
values
atributo. Ver ejemplo:Esto no funciona si no lo uso
values
, pero no sé por qué funciona.fuente
Aquí hay una solución para cuando solo desea tener un histograma como lo espera. Esto no usa groupby, pero convierte los valores de fecha y hora en números enteros y cambia las etiquetas en el gráfico. Se podrían realizar algunas mejoras para mover las etiquetas de las marcas a ubicaciones uniformes. También con el enfoque, también es posible una gráfica de estimación de densidad de kernel (y cualquier otra gráfica).
fuente
Creo que para resolver ese problema, puede usar este código, convierte el tipo de fecha en tipos int:
solo para obtener la fecha, puede agregar este código:
fuente
Yo también estaba teniendo problemas con esto. Me imagino que, dado que está trabajando con fechas, desea preservar el orden cronológico (como hice yo).
La solución alternativa es
Por favor, si alguien conoce una forma mejor, por favor hable.
EDITAR: para jean anterior, aquí hay una muestra de los datos [tomé una muestra aleatoria del conjunto de datos completo, de ahí los datos triviales del histograma].
Salida:
fuente
Todas estas respuestas parecen demasiado complejas, al menos con los pandas 'modernos' son dos líneas.
fuente
DataFrame
, pero no si todo lo que tiene es unSeries
. ¿Consideraría agregar una nota sobre ese caso?